Android开发提供源代码新手必备文档
- 格式:pdf
- 大小:9.42 MB
- 文档页数:55
Android开发人员不得不收集的代码(不断更新)为方便查找,已进行大致归类,其目录如下所示:•尺寸相关o dp与px转换dp2px、px2dpo sp与px转换sp2px、px2spo各种单位转换applyDimensiono在onCreate()即可强行获取View的尺寸forceGetViewSizeo ListView中提前测量View尺寸measureView•设备相关o获取设备MAC地址getMacAddresso获取设备厂商,如Xiaomi getManufacturero获取设备型号,如MI2SC getModelo获取设备SD卡是否可用isSDCardEnableo获取设备SD卡路径getSDCardPath•手机相关o判断设备是否是手机isPhoneo获取手机的IMIE getDeviceIMEIo获取手机状态信息getPhoneStatuso拨打电话callDialo发送短信sendSmso获取手机联系人getAllContactInfoo打开手机联系人界面点击联系人后便获取该号码getContantNumo获取手机短信并保存到xml中getAllSMS•网络相关o打开网络设置界面openWirelessSettingso判断是否网络连接isConnectedo判断wifi是否连接状态isWifiConnectedo获取移动网络运营商名称getNetworkOperatorNameo获取移动终端类型getPhoneTypeo获取连接的网络类型(2G,3G,4G) getCurNetworkTypeo获取当前手机的网络类型(WIFI,2G,3G,4G) getNetWorkStatus•App相关o安装指定路径下的Apk installApko卸载指定包名的App uninstallAppo获取App名称getAppNameo获取当前App版本号getVersonNameo获取当前App版本Code getVersionCodeo打开指定包名的App openOtherAppo打开指定包名的App应用信息界面showAppInfoo分享Apk信息shareApkInfoo获取App信息的一个封装类(包名、版本号、应用信息、图标、名称等)getAppInfoso判断当前App处于前台还是后台isApplicationBackground•屏幕相关o获取手机分辨率getDeviceWidth、getDeviceHeighto获取状态栏高度getStatusBarHeighto获取状态栏高度+标题栏(ActionBar)高度getTopBarHeighto获取屏幕截图snapShotWithStatusBar、snapShotWithoutStatusBaro设置透明状态栏,需在setContentView之前调用•键盘相关o避免输入法面板遮挡o动态隐藏软键盘hideSoftInputo点击屏幕空白区域隐藏软键盘o动态显示软键盘showSoftInputo切换键盘显示与否状态toggleSoftInput•正则相关o正则工具类•加解密相关o MD5加密encryptMD5o SHA加密encryptSHA•未归类o获取服务是否开启isRunningService•更新Log做这份整理只是想把它作为Android的一本小字典,当遇到一些琐碎问题时,不用再面向百度或者谷歌查询API的使用,费时费力,这里有的话,大家尽管撸走。
Android 开发最佳实践从Futurice公司Android开发者中学到的经验。
遵循以下准则,避免重复发明轮子。
若您对开发iOS或Windows Phone 有兴趣,请看iOS Good Practices和Windows client Good Practices这两篇文章。
摘要•使用 Gradle 和它推荐的工程结构•把密码和敏感数据放在gradle.properties•不要自己写 HTTP 客户端,使用Volley或OkHttp库•使用Jackson库解析JSON数据•避免使用Guava同时使用一些类库来避免65k method limit(一个Android程序中最多能执行65536个方法)•使用 Fragments来呈现UI视图•使用 Activities 只是为了管理 Fragments•Layout 布局是 XMLs代码,组织好它们•在layoutout XMLs布局时,使用styles文件来避免使用重复的属性•使用多个style文件来避免单一的一个大style文件•保持你的colors.xml 简短DRY(不要重复自己),只是定义调色板•总是使用dimens.xml DRY(不要重复自己),定义通用常数•不要做一个深层次的ViewGroup•在使用WebViews时避免在客户端做处理,当心内存泄露•使用Robolectric单元测试,Robotium 做UI测试•使用Genymotion 作为你的模拟器•总是使用ProGuard 和 DexGuard混淆来项目Android SDK将你的Android SDK放在你的home目录或其他应用程序无关的位置。
当安装有些包含SDK的IDE的时候,可能会将SDK放在IDE同一目录下,当你需要升级(或重新安装)IDE或更换的IDE时,会非常麻烦。
此外,若果你的IDE 是在普通用户,不是在root下运行,还要避免吧SDK放到一下需要sudo权限的系统级别目录下。
Android平台Qt开发⼊门教程很多⼈会问,Android平台可以不使⽤Java开发应⽤程序??我做Android平台native开发之前,也有这么想过,但是我⼜想,底层系统全是c/c++代码,⽤c/c++开发Android平台程序是可能的,只是需要使⽤系统⾮公开的API(就是android源代码,⽽⾮NDK⾥⾯提供的头⽂件),⽐如libui和skia。
好了,由于我的⼯作是把C++中间件移植到Android平台,所以会对Qt for android这个项⽬⽐较了解,毕竟国内做这些的还⽐较少,所以需要参考android-lighthouse如何解决的⽂字显⽰,图形,键盘,触摸屏事件等等。
⾔归正传,我们开始今天的教程: 在Android平台开发Qt应⽤程序。
前提:你的系统必须是linux,或者MAC OS X。
在windows平台使⽤cygwin开发会遇到问题。
你⾸先需要下载或以上版本,或以上版本。
然后下载好android-lighthouse, 这个就是android平台的Qt版本,国外个⼈移植的,nokia官⽅是不会发布这样的版本的。
git软件库地址:git:///~taipan/qt/android-lighthouse.git当然你还可以下载整合了android平台的qtcreator, 软件库地址:git:///~taipan/qt-creator/android-qt-creator.git 这样你可以直接在qtcreator⾥⾯开发测试android应⽤程序,这⾥有个视频介绍qtcreator开发android应⽤程序(被墙了,可以⽤VPN或proxy访问):下载,编译android-lighthouse:打开终端,输⼊"git clone git:///~taipan/qt/android-lighthouse.git",便开始下载android-lighthouse的源码。
第一行代码知识点总结1、Android四层架构:Linux内核层(提供底层驱动)、系统运行库层(提供特性支持,一些核心库)、应用框架层(提供各种API)和应用层2、Android四大组件:活动(activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)3、Android应用特色开发:四大组件、丰富的系统控件、SQL数据库(轻量级,运算速度快的嵌入式关系型数据库)、强大的多媒体和地理位置定位(LBS)。
4、Android程序设计讲究逻辑和视图分离,通常在布局文件中编写在界面4.1Android的日志工具Log:Log.d()打印调试信息对应debug。
Log.v()打印琐碎、意义最小日志,对应verbose,Log.i()打印比较重要的数据对应info;Log.w()打印警告信息对应error;Log.e()打印错误信息对应error。
Log.d(类名,打印内容)4.2活动:主要用于和用户进行交互、基本用法4.3活动中的提醒方式Toast4.4、drawable存放图片,mipmap存放应用图标,values放字符串、样式,颜色等配置,layout放布局文件4.5、Android Studio是采用Gradle来构建项目5、Intent的使用:显式Intent和隐式Intent()6、活动的生命周期7、返回栈的定义8、Android是使用任务来管理活动的9、活动状态:运行、暂停、停止、销毁状态10、Activity类中的七个回调方法:onCreate()onStaart()、onResume()、onPause()、onStop()、onDestroy()和onRestart()11、活动的三种生存期:完整、可见、前台12、活动的四种启动模式:standard、singleTop、singleTask 和singleInstance13、常用控件:TextView、Button、EditText、ImageView、ProgressBar(进度条)、AlertDialog(对话框)、ProgressDialog (显示对话框时出现进度条)14、基本布局:线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)百分比布局、AbsoluteLayout、TableLayout15、常用和最难用的控件ListView16、滚动控件:RecyclerView17、碎片的定义、使用方式、碎片的生命周期、状态和回调18、广播主要的两种类型:标准广播和有序广播;注册广播的方式:静态注册和动态注册;广播接收器继承BroadcastReceiver19、本地广播(LocalBroadcastManager)20、Android系统中三种数据持久化方式:文件储存、SharedPreference储存及数据库储存,还有保存在手机SD卡中21、SQliteOpenHelper帮助类:SQliteOpenHelper中有两个抽象方法onCreate()和onUpgrade();两种重要的实例方法getReadableDatabase()和getWritableDatabase()22、LitePal操作数据库23、跨程序共享数据:内容提供器24、ContentResolver的基本用法:ContentResolver类、ContentResolver中提供给了一系列的方法用于对数据进行CRUD操作包括增删改查操作;ContentResolver增删改查方法不接收表名参数,而是用Uri参数代替。
接下来需要对主逻辑进行开发,步骤如下所示。
搭建界面即开发main.xml文件,该文件非常简单,代码如下所示。
Java代码:1.<?xml version="1.0" encoding="utf-8"?>2.<!-- 声明xml的版本以及编码格式 -->3.<LinearLayoutxmlns:android="/apk/res/android" 3android:orientation="vertical"4.android:layout_width="fill_parent"5.android:layout_height="fill_parent"6.>7.<!-- 添加一个垂直的线性布局 -->8.<wyf.ytl.MainView9.android:id="@+id/mainView"10.android:layout_width="fill_parent"11.android:layout_height="fill_parent"12./>13.<!-- 向线性布局中添加一个自定义的View -->14.</LinearLayout>复制代码说明:该布局非常简单,只需将自定义的View添加到一个垂直的线性布局中即可。
开发主逻辑代码,即读取手机的姿态,然后改变小水泡的坐标。
首先搭建Sample.java的代码框架,如下所示。
Java代码:1.package eoe.demo;2.//声明所在包3.importorg.openintents.sensorsimulator.hardware.SensorManagerSimulator ;4.//引入相关类5.import android.app.Activity;6.//引入相关类7.import android.hardware.SensorListener;8.//引入相关类9.import android.hardware.SensorManager;10.//引入相关类11.import android.os.Bundle;12.//引入相关类13.public class Sample extends Activity {14.MainView mv;15.//主View16.int k = 45;17.//灵敏度18.private SensorManagerSimulator mySensorManager;19.//SensorManager对象引用20.//private SensorManager mySensorManager;21.//SensorManager对象引用22.@Override23.public void onCreate(Bundle savedInstanceState) {24.super.onCreate(savedInstanceState);25.setContentView(yout.main);26.//设置当前的用户界面27.mv = (MainView) findViewById(R.id.mainView);28.//获取主View29.//mySensorManager =(SensorManager)getSystemService(SENSOR_SERVICE);30.//获得SensorManager31.//调试时用32.mySensorManager = SensorManagerSimulator.getSystemService(this,SENSOR_ SERVICE); mySensorManager.connectSimulator();33.}34.private SensorListener mySensorListener = new SensorListener(){35.//监听器36.@Override37.public void onAccuracyChanged(int sensor, int accuracy) {38.}39.//重写onAccuracyChanged方法40.@Override41.public void onSensorChanged(int sensor, float[] values) {42.//重写onSensorChanged方法43.//此处省略的是接收手机姿态的数据并进行处理的代码,将在之后进行介绍44.}45.public boolean isContain(int x, int y){46.//判断点是否在圆内47.int tempx = (int) (x + mv.small.getWidth()/2.0);48.//得到水泡tempx坐标49.int tempy = (int) (y + mv.small.getWidth()/2.0);50.//得到水泡tempy坐标51.int ox = (int) (mv.big_X + mv.big.getWidth()/2.0);52.//得到大圆的X坐标53.int oy = (int) (mv.big_X + mv.big.getWidth()/2.0);54.//得到大圆的Y坐标55.if(Math.sqrt((tempx-ox)*(tempx-ox)+(tempy-oy)*(tempy-oy))36 >(mv.big.getWidth()/2.0-mv.small.getWidth()/2.0)){56.return false;57.//不在圆内58.}59.else {60.return true;61.//在圆内62.}63.}64.};65.@Override66.protected void onResume() {67.//重写的onResume方法68.mySensorManager.registerListener(69.//注册监听70.mySensorListener,71.//监听器SensorListener对象72.SensorManager.SENSOR_ORIENTATION,73.//传感器的类型为姿态74.SensorManager.SENSOR_DELAY_UI //频度75.);76.super.onResume();77.}78.@Override79.protected void onPause() {80.//重写onPause方法81.mySensorManager.unregisterListener(mySensorListener);82.//取消注册监听器83.super.onPause();84.}85.86.}复制代码。
本android帮助文档为在学习视频时自己制作比较混乱和粗糙,使用时查找第一页导航,再用word的查找功能进行查找导航页——基础说明——监听器的设置->创建监听器——调用android自带的短信发送功能——Activity的方法和生命周期(创建对话框风格的)——Activity的布局方法--LinearLayout线性--常用标签--TableLayout表格--GridView滑动表格--RelativeLayout相对布局——常用控件--除去title和全屏显示--EditText可输入文本框--RadioGroup和RadioButton单选按钮--Toast提示框--CheckBox多选按钮--ProgressBar进度条--ListView可选列表--MENU菜单控件的使用--Animation动画效果--4种动画效果--动画实现--JAVA中的实现--XMl文件中的实现-- Gallery (走马灯式的)移动选择控件--ImageSwitcher图片显示控件--ImageButton图片按钮控件--AlertDialog提示框——Handler的使用---线程--handler的简单应用--用handler更新ProgressBar进度条--handler与线程--线程之间的数据传递--Bundle对象(大量复杂数据) --Message对象(少量简单)--建立一个新的线程--HandlerThread类——SQLite的使用--SQLiteOpenHelper的方法注:带有下划线的是一些封装--代码的编写的可以直接调用的类,在”帮助文档的链接文件\封装的类”文件--封装的DatabaseHelper类夹中都有保存可以直接导入调用--主java文件--命令行的查询方法——文件下载--文件下载--步骤--在注册文件中注册权限--封装的HttpDownLoad类--在Activity中的调用--访问SDCARD --注册权限--封装的FileUtils类--在Activity文件中的调用——_XML文件的解析--SAX常用接口--XMl文件解析实例--实现ContentHandler接口的类--在Activity中的调用 XMl文件实例aaa.xml——广播机制--android中的广播机制--编写BroadcastReveicer类--创建包含BroadcastReveicer类的java文件--在onReceive中处理收到短消息的事件--AndroidManifest.XML注册文件中注册--代码当中进行注册--Activity中发送广播——WIFI--WIFI网卡的状态--操作WIFI网卡所需要的部分权限--改变WIFI网卡的状态——Socket编程--使用基于TCP协议的Socket--使用基于UDP协议的Socket——ServiceAndroid创建基础:src文件中为包类,其中用于建立activity的java文件res中drawable中为图片和标签layout中为布局文件,用于每个activity.java文件的标签布局AndroidManifest中为注册文件,每一个activity的建立都需要在其中注册代码的编写intent对象(用于在不同activity转换时的监听器设置)ponent name 指定activity2.Action 指定activity的作用3.Data 传送的数据类型4.Extras (额外)传送的键值对创建监听器的关键代码:(在第一个activity中)//创建一个Button监听器class myButtonListener implements OnClickListener{public void onClick(View v) {// TODO Auto-generated method stub//创建一个intent类Intent intent = new Intent();//创建一个键值对intent.putExtra("nexttext", "跳转成功");//创建关联intent.setClass(FirstActivity.this, SecondActivity.class);FirstActivity.this.startActivity(intent);}}在第一个activity中的转换关键标签上绑定监听器:(例在Button标签)(在onCreate中)//在Button上绑定监听器myButton.setOnClickListener(new myButtonListener());在第二个activity中的应用键值对(数据传递):(在onCreate中)//获取键值对Intent intent = getIntent();//获得键值对的值String text = intent.getStringExtra("nexttext");在Activity中调用android自带的短信发送功能的关键代码://调用短信发送功能class myButtonListener implements OnClickListener{public void onClick(View v) {// TODO Auto-generated method stub//发送号码Uri uri = Uri.parse("smsto://0800000123");Intent it = new Intent(Intent.ACTION_SENDTO,uri);//发送内容it.putExtra("sms_body", "the SMS text");startActivity(it);}}Activity的方法和生命周期:--onCreate 一个activity启动时运行(第一次)--onStart 当activity处于可见状态时运行--onResume 当activity可以得到用户焦点时(可以被操作)运行--onPause 当activity处于暂停状态时(例如弹出其他activity而原activity未被完全覆盖),可在此保存数据,以便此activity释放时恢复原状--onStop 当activity完全不可见时--onRestart 当activity未被销毁而在此被调用时--onDestory 当activity被销毁时当调用finish();语句时,Activity被销毁。
1 、可以使某些资源文件或 UI 组件可重用5 、TextView 属性设置设置字体为 30pt android:textSize ="30pt"设置中间省略 android:singleLine ="true" android:ellipsize ="middle"对邮件增加链接 android:autoLink = "email" android:autoLink = "email"测试密码框 android:password ="true"绘制一张图片android:drawableLeft= "@drawable/ico n "6 、EditText 属性设置当前组件在得到焦点的时候,自动选取该组件内的所有的文本内容android:selectAllOnFocus ="true"当前组件只能输入数字 android:phoneNumber ="true" 当前组件显示的提示信息,被选中时,内容自动被清空android:hint= "@string/edtPhoneButt on )android:background =""<ImageButton android:src ="" /><include layout 2 、定义一个文本编辑框, android:layout_x android:layout_y 3 、控件位置 ="@layout/other" 使用绝对定位="20dip" ="80dip"android:layout_centerHorizontal android:layout_centerVertical android:layout_centerInParent android:layout_alignParentBottom android:layout_alignParentLeft android:layout_alignParentRight android:layout_alignParentTop android:layout_toRightOf android:layout_toLeftOf android:layout_above android:layout_below android:layout_alignTop android:layout_alignBottomandroid:layout_alignLeft android:layout_alignRight />控制该组件是否位于布局容器的 水平居中位置 控制该组件是否位于布局容器的 垂直居中位置 控制该组件是否位于布局容器的 中央位置 控制该组件是否与布局容器 底端对齐 控制该组件是否与布局容器 左边对齐控制该组件是否与布局容器 右边对齐 控制该组件是否与布局容器 顶端对齐控制该组件 位于给出的 ID 组件的右侧 控制该组件 位于 给出的 ID 组件的左侧 控制该组件 位于 给出的 ID 组件的上方控制该组件 位于 给出的 ID 组件的下方 控制该组件 与给出的ID 组件的 上边界对齐 控制该组件 与给出的 ID 组件的 下边界对齐 控制该组件与给出的 ID 组件的 左边界对齐 控制该组件与给出的 ID 组件的 右边界对齐 4 、设置单元格内的控件的形状(可压缩,可伸长,可隐藏等) android:shrinkColumns 适应父容器宽度 android:stretchColumns 设置该列的所有单元格的宽度可以 被拉伸 ,以保证组件能完设置该列的所有单元格的宽度可以 被收缩 ,以保证该表格能够 全填满表格空余空间 设置该列的所有单元格会 被隐藏android:collapseColumns 7 、按钮以及属性( 普通文字按钮 普通图片按钮按下时显示不同图片的按钮(利用配置文件解决即,button_selector.xmlan droid:src ="@drawable/butto n_ selector")Butt on selector.xml:指定按钮按钮下时的图片<item an droid:state_pressed=an droid:drawable= />指定按钮松开时的图片:<item an droid:state_pressed= "false"定义一个可以动态改变方向的线性布局:匿名内部类:tb.set On CheckedCha ngeListe ner(new On CheckedCha ngeListe ner() {public void on CheckedCha nged(Compou ndButt on arg1) { if (arg1) {layout.setOrie ntatio n(Li nearLayout.HORIZONTAL); } else {layout.setOrie ntatio n(Li nearLayout.VERTICAL); }}});9、计时器组件( Chronometer )获取计时器组件:final Chronometer chro = (Chronometer) findViewByld(R.id.改变显示的信息内容,使用"%s"表示计时信息"true""@drawable/red"an droid:drawable= "@drawable/purple" />带文字的图片按钮an droid:backgrou nd ="@drawable/butto n_ selector"an droid:text="@str in g/bt nl mage"8、单选按钮和多选按钮 定义一组单选框定义一个单选框RadioGroup 、CheckBox ) vRadioGroup an droid:orientati onan droid:layout_gravity="vertical"="center horizontal" ="@stri ng/male"/>定义一个垂直的线性布局< Lin earLayout android:layout_gravity = "center horizontal"vCheckBox android:text android:checked="true" = "@string/red"9、带类似开关式的按钮(定义一个 ToggleButtonan droid:textOff an droid:text On ToggleButt on按钮:vToggleButt on="@stri ng/layoutH" = "@str in g/layoutV"/>layout = (LinearLayout) findViewByld(R.id.test);arg0, boolea ntest );10 、11 、android:textColor图像视图( ImageView )<ImageView= "#ffff0000" />android:src ="@drawable/icon"android:layout_marginLeft ="10dp"android:layout_marginTop ="100dp"自动完成文本框 ( AutoCompleteTextView )距离左边1 0d p距离上面1 00d p指定输入一个字符后进行提示:< AutoCompleteTextView />设置出现在下拉菜单中的提示标题:android:completionHint ="@string/title"设置下拉菜单的宽度:android:dropDownWidth ="100dp"设置下拉菜单与文本框之间的水平偏移:android:dropDownHorizontalOffset ="30dp" 设置用户至少输入几个字符才会显示提示:android:completionThreshold ="2"具体实现( Activity ):1 、定义字符串数组,作为提示的文本String[] books = new String[] { "active" , "activity" , "activity" , "apple" , "apple" };chro.setFormat( " 计时信息:%s" );获取“开始”按钮Button btnStart = (Button) findViewById(R.id. start ); 获取事件监听:btnStart.setOnClickListener( new OnClickListener() {publicvoid onClick(View arg0) { 设置开始计时时间:SystemClock 系统时钟类,elapsedRealtime 方法是得到当前系统的真实时间hro.setBase(SystemClock. elapsedRealtime ());启动计时器:chro.start();} });时钟改变一次监听一次:chro.setOnChronometerTickListener( newOnChronometerTickListener() {publicvoid onChronometerTick(Chronometer ch) { 如果从开始计时到现在超过了20s 。
01、什么是3G02、android系统简介03、android背景介绍04、android的framewor简介05、两种虚拟机的比较06、sdk的下载以及简介07、创建android模拟器08、ddms简介09、platform-tools的简介及常见adb指令10、android项目的目录结构11、android下apk安装的过程12、常见的adb指令介绍13、创建模拟器遇到的常见错误14、电话拨号器15、点击事件的四种写法16、短信发送器17、相对布局&单位介绍18、现形布局&布局的组合19、表格布局&绝对布局20、帧布局21、测试相关概念22、android下junit测试框架配置23、logcat简介24、保存文件到手机内存25、android下文件访问的权限26、保存文件到SD卡中27、分析setting源代码获取SD卡大小28、_sharePreference入门29、xml文件的序列化30、采用pull解析xml文件31、采用断电调试的方法观察pull解析的的流程32、android下创建一个sqllite数据库33、sql语句实现数据库的增删改查34、系统api实现数据库的增删改查&Sqlite3工具的使用35、数据库的事物36、listView入门37、采用layoutInflater打气筒创建一个view对象38、采用数据适配器ArryAdapter39、常用数据适配器simpleAdapter40、数据适配器总结41、内容提供者简介42、内容提供者的实现43、短信的备份44、插入一条记录到系统短信应用45、内容观察者46、获取系统的联系人信息47、保存联系人到系统通讯录48、读取联系人的一个小细节49、网络图片查看器50、anr产生的原理&如何避免51、android消息机制入门52、网络html查看器53、字符乱码问题的处理54、采用get方式提交数据到服务器55、采用post方式提交数据到服务器56、提交数据到服务器中文乱码问题的处理57、采用httpclient提交数据到服务器58、异步http框架简介&实现原理59、异步http框架提交数据到服务器60、上传文件到服务器61、smartimageview&常见开源代码62、多线程下载的原理63、多线程断点下载的原理64、多线程java代码移植到android65、多线程下载文本页面的更新66、显示意图激活另一个activity67、隐式意图激活另一个activity68、隐式意图的配置69、隐式意图和显示意图的使用场景70、在不同activity之间数据传递71、activity的声明周期72、activity的启动模式73、activity横竖屏切换的声明周期74、开启新的activity获取他的返回值75、请求码和结果码的作用76、利用广播实现ip拨号77、短信窃听器78、自定义广播时间&发送自定义广播&广播接受者优先级79、采用服务执行长期后台操作80、采用服务窃听电话&服务的声明周期81、android进程优先级&为什么使用服务82、绑定方式开启服务&调用服务的方法83、服务的声明周期(混合开启84、采用aidl绑定远程服务85、代码注册广播接受者&利用广播调用服务的办法86、加载大图片到内存87、获取图片exif信息88、从gallery获取图片89、图片画画板90、扒开美女衣服91、图片的缩放92、图片的旋转93、图片的平移&镜面&倒影效果94、图片的合成95、图片的颜色处理96、多媒体播放api简介97、人脸识别98、mediaplayer的生命周期99、soundpoo简介100、sufaceview的生命周期101、播放在线视频102、视频播放器进度的处理103、调用系统照相机拍照和录像104、采用camera拍照105、常见对话框106、notification入门107、菜单108、android下的样式109、android下的主题110、代码编写ui111、html创建ui112、帧动画113、代码创建创建的tween动画114、xml文件定义动画115、传感器简介116、117、杀死进程118、apk的安装119、应用程序的反编译120、动态创建fragment121、用fragment创建一个选项卡122、fragment的向下兼容性123、fragment的生命周期124、fragment之间的通讯125、应用程序国际化04、android的framewor简介Wap:wait and playWireless Makeup Language(WML)精简的html语言Applications:android自带的基本上层应用Aplication framework:应用程序框架Librarics:Linux lernel:05、两种虚拟机的比较编译后文件格式:jvm:.java->.class->.jardalvik vm:.java->.dex->.odex基于的架构:jvm:基于栈的架构dalvik vm:基于寄存器的架构Cpu直接访问寄存器因此dalvik虚拟机的效率比jvm高06、sdk的下载以及简介->获取sdk工具包(sdk:standard develope kits)->ADT(android develop tools,实际上是eclipse的插件)SDK具体内容Android->SDK Plateform:开发时使用到的jar包->Samples for sdk:->ARM EABI V7a System Image:模拟器运行时的镜像->Intel n86 Aton System:模拟器运行时的镜像->MIPS System Image:模拟器运行时的镜像->google APIs:google提供的jar包,可以直接使用google提供的一些API ->source for android SDK:SDK全部的源代码Extrals:->tools:开发的工具->support library:实现高版本的android向下的兼容->google Admed Ads SDK:gongle提供的广告插件->Analyties App Irackiong SDK:应用的用户分析->cloud message:云消息->gongle play service:收费服务->google USB Driver:真实的设备驱动开发时:基于4.0,兼容2.2、2.3.307、创建android模拟器avd:android virture developerVGA:480*640(电视的标准分辨率)QVGA:240*320(四分之一)HVGA:320*480(一半)WVGA:480*800(width)FWVGA:480*854(更宽)08、ddms简介ddms:模拟器不支持中文,因此发送中文会显示不出来09、platform-tools的简介及常见adb指令Android调试桥:内部实现就是socket让两个系统之间实现数据交互->reset adb:模拟器找不到时候可以重启->adb device:列出所有的连接的设备->adb kill-server:杀死adb调试桥->adb start-server 启动adb调试桥dx.bat:将.class文件打包10、android项目的目录结构一:SDK的目录结构->Samples->Api demo:根据API demo(模拟器上面可以看见)的效果可以在sample中看见相应的代码->Source:jar包所有的sdk源代码都在这个文件夹里->SystemImage:系统镜像->temp:下载更新临时存储的文件夹,一般是空的->tools:emulater.ext 不同版本的模拟器二:New Android Application->theme:留给以后作为扩展,现在并没有太大的作用->target SDK:一般选择高版本,因为高版本对下兼容->mark project as a library:一般不选择,意思是将这个项目提供一个jar包供别人使用三:文件夹目录.setting:设置目录assets:资产目录,存放一些文件,这些文件会被原封不动打包到应用程序的apk中bin:gen:自动生成的目录->builderConfig.java:生成的配置信息->R.java:Android 4.1.2->android.jar开发环境,jar包可以在properties中修改,jar包就是SDK011、Android下apk的安装过程一、Android安装过程分析:->setContentView:甚至view的对象,把里面的xml文件加载到->在project中选择build automaticly会自动把文件生成字节码文件,.class $代表的class文件生成的是内部类->dex.bat文件会把.class文件生成.dex文件->apk压缩文件解压内部内容->META-INF:应用程序的签名eclipse的调试签名文件->res:资源文件->classes.dex:class文件->resources.arsc:资源ID映射->android软件安装的过程:->拷贝xxx.apk带/data/app/xxx-1.apk->在/data/data目录下创建一个文件夹,文件夹名称当前应用程序的报名012、常见adb指令前提:->设备连接上电脑而且驱动安装正常,如果安装不正常的话,会有黄色的问号显示;->设备上打开USB调试;指令:->adb device(如果启动发现这个程序没有安装会自动安装)->adb kill-server->adb start-server->adb uninstall <包名>->adb -s emulator-5554 install c:\\users\\administrator\\hello.apk如果有多个设备的话,如果不指定安装的是哪个设备程序会报错->adb push haha.prop /sdcard/haha.txt 将文件移到(360管家,豌豆荚之类的软件他们也是用的adb指令,倘若电脑上装这些软件的话,会因为两个adb指令抢端口号而挂掉)(adb版本之间兼容不是很好,经常报错可以考虑下版本的问题)->adb shell:远程连接到了android的linux终端ls:显示文件夹ps:显示正在运行的程序ping:网络连通性013、创建模拟器遇到的常见错误->路径最好不要有中文:->应用安装不上,或者安装模拟器的时候开启一个新的模拟器:可能是模拟器的资源被占用,模拟器在运行的时候其实占用着硬盘上面的一个文件,这个文件位于工作空间.android/avd/iphone.avd 里面会有镜像文件,当一个模拟器开启起来了,就给你创建一个文件夹.knock的文件夹,代表着这个模拟器被锁定了,如果把模拟器关掉,就没有程序占据这几个镜像资源了,那么这几个程序就会被自动删除。
一、Introduction(入门)0、Introduction to Android(引进到Android)Android provides a rich application framework that allows you to build innovative apps and games for mobile devices in a Java language environment. The documents listed in the left navigation provide details about how to build apps using Android's various APIs.To learn how apps work, startwith App Fundamentals.To begin coding right away, read Building Your First AppAndroid提供了丰富的应用程序框架,它允许您在Java语言环境中构建移动设备的创新应用程序和游戏。
在左侧导航中列出的文档提供了有关如何使用Android的各种API来构建应用程序的详细信息。
要了解如何开发应用,从应用基础开始。
如何开始一个正确的编码,请参照建立你的第一个应用程序。
Apps provide multiple entry points 应用程序提供多个入口点Apps adapt to different devices 应用程序适应不同的设备Android apps are built as a combination of distinct components that can be invoked individually. For instance, an individual activity provides a single screen for a user interface, and a service independently performs work in the background.Android应用程序被构建为能够单独地被调用不同的部件的组合。
Android开发文档(二)一、Android Library (2)二、圆角 (4)三、适应屏幕的背景图 (6)四、改变图片的颜色 (7)五、仿iphone的点击效果 (8)六、有最大最小宽高值的ImageView (9)七、屏幕的某位置弹出缩放动画 (10)八、列表项的删除动画效果 (12)九、自定义padding动画 (14)十、Activity向右Touch退出 (16)十一、点击编辑框外任意点,隐藏软键盘 (20)十二、Activity的ContentView添加删除 (22)十三、Activity的WindowManager (25)吴健兴/2013.08.19一、Android LibraryLibrary工程的好处一些util 方法或者我们自定义的控件放到Library工程,实现复用;相比jar 包而言,他可以实现资源文件的复用甚至覆盖;模块化设计实现代码共享,便于管理,提高效率;Library工程的设置在包资源管理窗口,右键点击要进行设置的项目->属性->Android->勾选Is Libarary;Library工程的引用在包资源管理窗口,右键点击要引用Library工程的项目->属性->Android->右下Add ->选择要引用的Libarary->确定;二、圆角方式一:使用xml文件定义圆角方式二:canvas.drawBitmap()此方法需要new一个canvas来生成圆角;方式三:canvas.clipPath()此方法需要View中canvas对象来生成圆角,这个对象在draw类方法中被传入;所以要继承View并重写draw(),onDraw(),dispatchDraw()等方法进行实现;通过第三种方法的效果作用范围更广,使用更灵活:三、适应屏幕的背景图一张720*1280的图片占用的内存大概为:720*1280=921600B,接近1M,一张1M的图片存在于应用内存中,是一件很危险的事情,不仅会影响当前的页面的绘制性能,会占用了大量的内存,使得OutOfMemoryError错误出现的概率更高;所以对于大背景图,应当做一些降低消耗的处理;而当背景图很长,或者很宽时,我们应该对背景图进行截取,使得图片的宽高比与屏幕的宽高比一致,使得图片中的图案不至于被拉伸;所以,对于一张比较大的并且高宽比与屏幕的宽高比不一致的可以做以下的处理:1、缩小到和屏幕一样大;2、裁剪得和屏幕宽高比一样;四、改变图片的颜色下图动态条目的声音图标,原来是白色的,可以通过代码改变图标为红色。
android 为 ListView Item中的组件添加事件以及更新数据// 部分代码如下:其中holder.count 是一个EditViewholder.price 是一个TextViewJava代码1viewplaincopytoclipboardprint?2@Override3publicViewgetView(finalintposition,ViewconvertView,finalViewGroupparent) {4。
5//注意该方法中的Item组件不能使用holder模式,如果用该模式,所有的组件将共享item中view的事件6导致监听不到指定item中的view的事件,解决办法就是每次创建一个Item中的组件78然后对于每个item使用不同的监听事件即newTextWatcher()每次都创建一个新的事件监听器910finalViewHolderholder=newViewHolder();1112holder.count.addTextChangedListener(newTextWatcher(){13.....14@Override15publicvoidafterTextChanged(Editables){16//holder.price是与holder.count在同一个item的view17holder.price.setText(".......");//赋值起作用18.....19//textTotalPrice是最后一个Item中的view20//与holder.price不是同一个item中的view21textTotalPrice.setText("。
");//赋值无效22//更新list23goods.get(position).setCount(count+"");24//更新数据:条用该方法的以后,会重新执行getView方法,非局部跟新25GoodsListAdapter.this.notifyDataSetChanged();26});完整代码如下:Java代码1.viewplaincopytoclipboardprint?2.importjava.util.List;3.4.importorg.android.util.NumberUtils;5.6.importandroid.app.Activity;7.importandroid.text.Editable;8.importandroid.text.TextWatcher;9.importandroid.util.Log;youtInflater;11.importandroid.view.View;12.importandroid.view.ViewGroup;13.importandroid.widget.BaseAdapter;14.importandroid.widget.EditText;15.importandroid.widget.TextView;16.17.importcom.mmb.shop.R;18./**19.*购物车:商品列表20.*21.*@authorwangtao22.*/23.publicclassGoodsListAdapterextendsBaseAdapter{24.25.privatestaticList<Goods>goods;26.27.privateLayoutInflatermInflater;28.29.privatestaticTextViewtextTotalPrice;30.31.//privateActivitycontext;32.33.publicGoodsListAdapter(List<Goods>goods_,Activitycontext){34.goods=goods_;35.mInflater=context.getLayoutInflater();36.//this.context=context;37.}38.39.@Override40.publicViewgetView(finalintposition,ViewconvertView,finalViewGroupparent){41.//最后一条显示总价42.if(position==goods.size()){43.convertView=mInflater.inflate(yout.simple_list_item_1,parent,false);44.textTotalPrice=(TextView)convertView.findViewById(android.R.id.text1);45.if(goods.size()>0){46.textTotalPrice.setText("总价:"+calcuteTotalPrice()+"");47.}else{48.textTotalPrice.setText("购物车为空....");49.}50.returnconvertView;51.}52.53.finalViewHolderholder=newViewHolder();54.//商品列表布局55.convertView=mInflater.inflate(yout.list_item_shop_car,parent,false);56.holder.id=(TextView)convertView.findViewById(R.id.goods_id);=(TextView)convertView.findViewById(R.id.goods_name);58.//不能使用Holder模式;必须每次都创建一个不同的EditText组件59.holder.count=(EditText)convertView.findViewById(R.id.goods_count);60.//单价61.holder.singlePrice=(TextView)convertView.findViewById(R.id.goods_single_price);62.//总价63.holder.price=(TextView)convertView.findViewById(R.id.goods_price);64.65.finalGoodsitem=goods.get(position);66.//holder.id.setText(item.getId());.setText(item.getName());68.holder.count.setText(item.getCount());69.holder.singlePrice.setText(item.getSinglePrice());70.floattotalPrice=Integer.valueOf(item.getCount())*Float.valueOf(item.getSinglePrice());71.holder.price.setText("价格:"+totalPrice+"");72.//设置没类产品的总价73.goods.get(position).setTotalPrice(totalPrice+"");74.75.//添加编辑框的change事件76.holder.count.addTextChangedListener(newTextWatcher(){77.@Override78.publicvoidonTextChanged(CharSequences,intstart,intbefore,intcount){79.}80.@Override81.publicvoidbeforeTextChanged(CharSequences,intstart,intcount,82.intafter){83.}84.@Override85.publicvoidafterTextChanged(Editables){86.try{//s.toString()即是文本框的值87.intcount=Integer.valueOf(s.toString());88.floatsinglePrice=Integer.valueOf(item.getSinglePrice());89.floattotalPrice=count*singlePrice;90.holder.price.setText(totalPrice+"");91.goods.get(position).setTotalPrice(totalPrice+"");92.textTotalPrice.setText(GoodsListAdapter.calcuteTotalPrice()+"");93.goods.get(position).setCount(count+"");94.//更新数据95.GoodsListAdapter.this.notifyDataSetChanged();96.//ViewconvertView=mInflater.inflate(yout.simple_list_item_1,parent,false);97.//updateItemInTotalPrice();98.}catch(Exceptione){99.Log.e("xx",e.getStackTrace().toString());100.}101.102.}103.});104.r eturnconvertView;105.}106.//ViewHolder模式????107.s taticclassViewHolder{108.T extViewid;//ID109.T extViewname;//名称110.E ditTextcount;//数量111.T extViewsinglePrice;//单价112.T extViewprice;//单个商品的总价113.114.}115.116./**117.*计算所有购物车商品总价118.*@return119.*/120.p rivatefinalstaticfloatcalcuteTotalPrice(){121.f loatprice=0f;122.f or(Goodsgs:goods){123.p rice+=NumberUtils.toFloat(gs.getTotalPrice()); 124.}125.r eturnprice;126.}127.//更新购物车商品总价Item~~非全部整合ListView128.//privatefinalvoidupdateItemInTotalPrice(){129.//TextViewview=(TextView)this.getItem(goods.size()); 130.//view.setText("ddddddddd");131.//}132.133.@Override134.p ublicintgetCount(){135.r eturngoods.size()+1;136.}137.@Override138.p ublicObjectgetItem(intposition){139.r eturnposition;140.}141.@Override142.p ubliclonggetItemId(intposition){143.r eturnposition;144.}145.146.}。
Android 开发从入门到精通Android 是一种基于 Linux® V2.6 内核的综合操作环境。
最初,Android 的部署目标是移动电话领域,包括智能电话和更廉价的翻盖手机。
但是, Android 全面的计算服务和丰富的功能支持完全有能力扩展到移动电话市场以外。
Android 也可以用于其他的平台和应用程序。
本专题提供的教程、技术文章首先带大家了解Android 开发,进而深入到 Android 开发的各个方面。
Android 开发入门•Android 开发简介Android 是 Google 提供的移动、无线、计算机和通信平台。
通过使用 Android Eclipse 插件,可以在强大的 Eclipse 环境中构建 Android 应用程序。
本教程介绍如何用 Eclipse 插件 AndroidDevelopment Tools 进行 Android 应用程序开发,包括对 Android 平台和 AndroidDevelopment Tools 的介绍,并开发两个示例应用程序。
•用 Eclipse 开发 Android 应用程序Android 是一种基于 Linux® V2.6 内核的综合操作环境。
最初,Android 的部署目标是移动电话领域,包括智能电话和更廉价的翻盖手机。
但是, Android 全面的计算服务和丰富的功能支持完全有能力扩展到移动电话市场以外。
Android 也可以用于其他的平台和应用程序。
在本文中,阅读对Android 平台的简介,并学习如何编写基本的 Android 应用程序。
Android 开发简介开源的设备平台Frank Ableson, 软件设计师简介: Android 是一种基于 Linux® V2.6 内核的综合操作环境。
最初,Android 的部署目标是移动电话领域,包括智能电话和更廉价的翻盖手机。
但是, Android 全面的计算服务和丰富的功能支持完全有能力扩展到移动电话市场以外。
Android开发指南Android中文开发文档-初学者目录应用程序基础Application Fundamentals (4)关键类 (4)应用程序组件 (5)激活组件:intent (7)关闭组件 (7)manifest文件 (8)Intent过滤器 (9)Activity和任务 (10)Affinity(吸引力)和新任务 (11)加载模式 (12)清理堆栈 (13)启动任务 (14)进程和线程 (14)进程 (14)线程 (15)远程过程调用 (15)线程安全方法 (16)组件生命周期 (17)Activity生命周期 (17)调用父类 (17)服务生命周期 (20)广播接收器生命周期 (22)用户界面User Interface (23)视图层次View Hierarchy (24)布局Layout (24)部件Widgets (25)用户界面事件UI Events (26)菜单Menus (26)高级话题Advanced Topics (27)适配器Adapter (27)风格与主题Styles and Themes (27)资源和资产Resources and Assets (27)资源引用Resource Reference (43)国际化和本地化Internationalization and Localization (43)意图和意图过滤器Intents and Intent Filters (43)意图过滤器Intent filters (47)通常情况Common cases (51)使用意图匹配Using intent matching (52)数据存储Data Storage (52)概览Storage quickview (52)✧系统偏好:快速,轻量级存储 (52)✧文件:存储到设备内部或可移动闪存 (52)✧数据库:任意的结构化存储 (52)✧支持基于网络的存储 (52)系统偏好Preferences (53)文件Files (54)网络Network (55)内容提供器Content Providers (55)内容提供器的基础知识Content Provider Basics (55)查询一个内容提供器Querying a Content Provider (57)修改数据Modifying Data (61)创建一个内容提供器Creating a Content Provider (64)Content URI 总结 (67)清单文件The AndroidManifest.xml File (68)清单文件结构Structure of the Manifest File (68)文件约定File Conventions (70)文件特性File Features (73)应用程序基础Application Fundamentals关键类1.Activity2.Service3.BroadcastReceiver4.ContentProvider5.IntentAndroid应用程序使用Java做为开发语言。