一.基本组件
1.Activity
是Android应用中负责与用户交互的组件,相当于swing中的JFrame控件
| Fragment 可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的生命周期,单独处理自己的输入,在Activity运行的时候可以加载或者移除Fragment模块
对Android 3.0 以前的支持(引用 android.support.v4.app.Fragment)
| 在Activity中使用Fragment,需要将Fragment添加到Activity中,可以在布局文件中使用<fragment.../>元素添加;
也可在代码中使用FragmentTransaction的add()方法添加
| FragmentActivity,在早期版本使用Fragment,必须借助FragmentActivity的支持,只有使用该类的getSupportFragmentManager()方法才能获得 FragmentManager管理器ViewPager 它是Fragment的容器,可同时管理多个Fragment.并允许多个Fragment切换时提供动画效果
FragmentPagerAdpater Adpater类用于为ViewPager提供多个Fragment,通常用于扩展
| getActivity()方法,获取Fragment所在的Activity
| 不同场景下的Fragment子类
| DialogFragment 对话框界面的Fragment
| ListFragment 实现列表界面的Fragment
| PreferenceFragment 选项设置界面的Fragment
| WebViewFragment WebView界面的Fragment
| onAttach() 当Fragment被添加到Activity中时被调用
| onCreate() 系统创建Fragment对象后回调该方法,用于初始化.
| onCreateView() 当Fragment绘制界面组件时回调该方法
| onActivityCreated() 当Fragment所在的Activity被启动完成后回调该方法
| onStart() 启动Fragment时被回调
| onResume() 恢复Fragment时被回调
| onPause() 当用户离开该Fragment时回调该方法
| onStop() 停止Fragment时被回调
| onDestoryView() 销毁该Fragment所包含的View时被调用
| onDestory() 销毁Fragment时被调用
| onDeatch() 将该Fragment从Activity中被删除,被替换完成后调用该方法
| FragmentManager.findFramentById()/findFragmentByTag()获取指定的Fragment
| 调用Fragment的setArguments(Bundle bundle) 可将Activity中的数据传递给Activity
| 不同场景下的Activity的子类
| FragmentActivity 实现账户管理界面
| ListActivity 实现列表界面
| LauncherActivity 实现Activity界面的Activity,当点击列表项时,所对应的Activity被启动
| AliasActivity 启动其他Activity时结束自己
| ExpandableListActivity 实现可扩展列表界面
| ExpandableListActivityTest 显示一个可扩展的列表窗口
| TabActivity 实现Tab界面
| setContent(int viewId) 直接将指定的View组件设置成Tab的Content
| setContent(Intent intent) 直接指定Intent对应的Activity设置成Tab的Content
| PreferenceActivity 实现程序参数设置,存储界面的Activity
| PreferenceActivityTest 显示一个显示设置选项参数并进行保存的窗口
| android:launchMode
| standard 标准模式,每次创建一个新的Activity实例,并添加到当前Task栈中
| singleTop Task顶单例模式,与standard类似,如果Activity以处于Task栈顶,系统不会创建新的Activity,直接复用已有的Activity
| singleTask Task内单例模式,同一个Task栈中只有一个Activity实例
| singleInstance 全局单例模式,无论从哪个Task栈中启动Activity,只会创建一个Activity实例
| onCreate(Bundle b) 创建Activity时被回调,只调用一次
| onStart() 启动Activity时被回调
| onRestart() 重新启动Activity时被回调
| onPause() 暂停Activity时被回调
| onStop() 停止Activity时被回调
| onDestory() 销毁Activity时被回调,只调用一次
| startService(Intent intent) 启动指定service
| stopService(Intent intent) 停止指定service
2.View
是所有UI控件,容器控件的基类,是Android应用中用户实实在在看到的部分
3.Service
与Activity的地位并列.Service位于后台,需要继承Service基类,一般不与用户交互
| 生命周期
| IBinder onBind(Intent intent) Service子类必须实现的方法,方法返回一个IBinder对象,应用程序可通过该对象与Service通讯
| void onCreate() 当该Service第一次被创建后立即回调该方法
| void onDestroy() 当该Service被关闭之前会回调该方法
| void onStartCommand(Intent,int flag,int startId) 每次客户端调用startService(Intent intent)方法启动Service时会回调该方法
| boolean onUnbind(Intent intent) Service上绑定的所有客户端都断开连接时回调该方法
| 子类
| IntentService
| 创建单独的worker线程处理所有Intent请求
| 创建单独的worker线程处理onHandleIntent()方法实现的代码,开发者无需处理多线程问题
| 处理完所有请求后IntentService会自动停止
| 为Service onBind方法提供了默认的实现,返回null
| 为Service onStartCommand方法提供了默认实现,该实现会将请求intent添加到队列中
| AIDL Service 跨进程访问Service
| AIDL 定义接口的源码必须以.aidl结尾
| AIDL 接口中用到的数据类型,除了基本数据类型,String,List,Map,CharSequence之外,其他类型全部需要倒包,即使在同一个包下也需要
| 将接口暴露给客户端
| 定义AIDL接口并定义Service实现,并在AndroidManifest.xml中配置
| 客户端访问AIDL Service
| 创建ServiceConnection对象
| 以ServiceConnection对象作为参数,调用Context的bindService方法,绑定远程service
| 实现Parcelable接口,(相当于java实现Serializable) 序列化
| startService(intent)/stopService(intent) 启动/停止指定service Service和访问者无法进行数据交换
| bindService()/unbindService 启动/停止指定service Service和访问者可以进行数据交换
4.BroadcastReceive(广播接收器)
类似于事件编程中的监听器,其事件源是Android应用中的其他组件
| 使用步骤
| 创建需要启动的BroadcastReceive的Intent
| 调用Context的sendBroadcast()或sendOrderedBroadcast() 方法启动指定的BroadcastReceive
| Broadcast
| Normal Broadcast 普通广播 异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递效率比较高
| sendBroadcast() 发送Normal Broadcast
| Ordered Broadcast 有序广播 按声明的优先顺序依次接收Broadcast
| sendOrderedBroadcast() 发送Ordered Broadcast
| 接收系统广播
| ACTION_TIME_CHANGED 系统时间改变
| ACTION_DATE_CHANGED 系统日期改变
| ACTION_TIMEZONE_CHANGED 系统时区改变
| ACTION_BOOT_COMPLETED 系统启动完成
| ACTION_PACKAGE_ADDED 系统添加包
| ACTION_PACKAGE_CHANGED 系统包改变
| ACTION_PACKAGE_REMOVED 系统包删除
| ACTION_PACKAGE_RESTART 系统包重启
| ACTION_PACKAGE_DATA_CLEARED 系统包的数据被清理
| ACTION_BATTERY_CHANGED 电池电量改变
| ACTION_BATTERY_LOW 电池电量低
| ACTION_POWER_CONNECTED 系统连接电源
| ACTION_POWER_DISCONNECTED 系统与电源断开
| ACTION_SHUTDOWN 系统被关闭
5.ContentProvider(数据共享机制)
应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.
通常与ContentResolve结合使用,一个应用通过ContentResolve暴露数据,另一个应用通过ContentProvider接收数据
6.Intent IntentFilter
Intent Android应用内组件相互通信的载体. IntentFilter判断被调用组件是否符合隐式Intent
| 启动组件
| 启动Activity
| startActivity(Intent i),startActivityForResult(Intent i,int code)
| 启动Service
| ComponetName startService(Intent i),boolean bindService(Intent i,ServiceConnection conn,int falg)
| 启动BroadcastReceiver Broadcast
| sendBroadcast();senOrderedBroadcas();sendStickyBroadcast()
| <intent-filter.../>元素是AndroidManifest.xml文件中<activity../>元素的子元素,用于配置该Activity所能响应的Intent
| 属性
| Component(显示Intent) 接受一个ComponentName对象 指定包名,类名创建一个可以唯一确定的组件类
| Action 代表Intent所要完成的一个抽象的动作
| Category 为Action增加额外的附加类别信息
| Data 向Action属性提供操作的数据(形式: scheme://host:port/path)
| Type 指定Data所指定的Uri对应的MIME类型,这种MIME可以使任意自定义类型
| AndroidManifest.xml文件为组件声明Data,Type属性都是通过<data.../>元素
| mimeType="" 声明该组件所能匹配的Intent的Type属性
| scheme"" 声明该组件所能匹配的Intent的Type属性
| host="" 声明该组件所能匹配的Intent的Data属性的scheme部分
| post="" 声明该组件所能匹配的Intent的Data属性的post部分
| path="" 声明该组件所能匹配的Intent的Data属性的path部分
| pathPrefix="" 声明该组件所能匹配的Data属性的path前缀部分
| pathPattern="" 声明该组件所能匹配的Data属性的path后缀部分
| Extra 用于多个Action之间的数据交换,该属性值是一个Bundle对象
| Flag 用于为该Intent添加一些额外的控制旗标
| 可调用addFlags()方法为Intent添加旗标
| setClass() 设置Intent要启动的组件对应的类
| setClassName() 设置Intent要启动的组件对应的类名
7.资源管理器
| TelephonyManager 电话管理器
| TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
| SmsManager 短息管理器
| sendXxxMessage() 发送短息
| AudioManager 音频管理器
| adjuStreamVolume(int streamType,int direction,int flags) 调整手机指定类型的声音
| streamType指定声音类型
| STREAM_ALARM 手机闹铃声音
| STREAM_DTMF DTMF音调的声音
| STREAM_MUSIC 手机音乐的声音
| STREAM_NOTIFICATION 系统提示的声音
| STREAM_RING 电话铃声的声音
| STREAM_SYSTEM 手机系统的声音
| STREAM_VOICE_CALL 语音电话的声音
| direction 指定对声音增大还是减少
| flags 调整声音时的标识,FLAG_SHOW_UI 指定调整声音时显示音量进度条
| setMicrophoneMute(boolean on) 设置是否让麦克风静音
| setMode(int mode) 设置声音模式,NORML,RINGTONE,IN_CALL
| setRingerMode(int ringerMode) 设置手机的电话铃声的模式
| RINGER_MODE_MORMAL 正常的手机铃声
| RINGER_MODE_SILENT 手机铃声静音
| RINGER_MODE_VIBRATE 手机震动
| setSpeakerphoneOn(boolean on) 设置是否打开扩音器
| setStreamMute(int streamType,boolean status) 将手机指定类型的声音调整为静音
| setStreamVolume(int streamType,int index,int flags)直接设置手机的指定类型的音量值
| Vibrator 振动器
| vibrator = (Vibrator)getSystemService(Service.VIBRATOR_SERVICE);
| vibrate(long milliseconds) 控制手机震动毫秒数
| vibrate(long[] pattern,int repeat) 指定手机以pattern指定的模式震动
| cancel() 关闭手机震动
| AlarmManager 手机闹钟服务
| alarmManager = (AlarmManager)getSystemService(Service.ALARM_SERVICE);
| set(int type,long triggerAtTime,PendingIntent operation) 设置在triggerAtTime时间启动operation参数指定的组件
| triggerAtTime指定定时服务的类型
| ELAPSED_REALTIME 指定从现在时间过了一段时间后启动operation所对应的组件
| ELAPSED_REALTIME_WAKEUP 指定从现在开始时间过了一段时间后启动operation所对应的组件 系统关机也执行
| RTC 指定当系统调用System.currentTimeMillis()方法返回值与triggerAtTime相等时启动operation所对应的组件
| RTC_WAKEUP 指定当系统调用System.currentTimeMillis()方法返回值与triggerAtTime相等时启动operation所对应的组件 系统关机也执行
| setInexactRepeating(int type,long triggerAtTime,long interval,PendingIntent operation) 设置一个非常精确的周期任务,
| setRepeating(int type,long triggerAtTime,long interval,PendingIntent operation) 设置一个周期性执行的系统任务
| cancel(PendingIntent operation) 取消AlarmManager的定时服务
二.UI组件
布局组件
1.LinearLayout 线性布局
将容器里的组件一个挨一个排起来(可控制横向排列或纵向排列)
2.TableLayout 表格布局
采用行,列的形式管理UI组件,其中一个TableRow代表一行
3.FrameLayout 帧布局
为每个组件创建一个空白区域(称为一帧),每个组件占用一帧
| ViewAnimator 可以在View切换时出现动画效果
| ViewFlipper 视图切换,出现动画效果
| ViewSwitcher 【视图切换组件】,多个View叠在一个,每次显示一个View
| ImageSwitcher 【图像切换器组件】
| TextSwitcher 【文本切换器组件】
| DatePicker 【日期选择器】
| TimePicker 【时间选择器】
| NumberPicker 【数值选择器】 用户可以键盘输入,也可以拖拽选择数值
| ScrollView 【垂直滚动视图】 为普通组件添加滚动条,其中最多只能包含一个组件
| HorizontalScrollView【水平滚动视图】 为普通组件添加滚动条,其中最多只能包含一个组件
4.RelativeLayout 相对布局
其内组件总是相对相对兄弟组件,父容器来决定位置
5.GridLayout 网格布局(4.0新增)
相当于html中的table标签,将整个容器划分成 row * column 个网格,每个网格可放一个组件,也可设置组件跨多少列多少行
6.AbsoluteLayout 绝对布局
通过自定义X坐标与Y坐标控制组件位置
TextView组件
1.TextView 【显示文本框】
| CheckedTextView 【提供勾选显示文本框】
| Button 【按钮】 使用9patch图片可设置图片拉伸过程中不被改变的部分
| RadioButton【单选按钮】一般与RadioGroup联合使用,保证一组单选按钮只能选中一个
| CheckBox 【复选按钮】
| ToggleButton 【状态开关按钮】提供两种状态,通常用于程序中状态切换
| Switch 【开关按钮】
| DigitalClock 【数字时钟】
| AnalogClock 【模拟时钟】不显示当前秒数
| Chronometer 【计时器】
TextView没有边框,实现边框可通过设置背景实现
2.EditText 【用户输入文本框】
| AutoCompleteTextView 【自动完文本框】
| MultiAutoCompleteTextView 【自动完文本框】允许输入多个提示项,多个提示项以逗号分隔
| ExtractEditText 【EditText的底层服务】
3.ImageView 【显示图片文本框】
| ImageButton 【图片按钮】
| ZoomButton 【放大/缩小按钮】
| QuickContackBadge【关联联系人按钮】
4.AdapterView 抽象基类,用于列表显示
| ListView 【列表组件】 直接使用
| ExpandableListView 【可扩展的列表组件】他把列表项分为几组,每组又可包含多个列表项
| ListActivity 【列表抽象类】用于Activity继承
| Spinner 【列表选择框】提供一个供用户选择的列表框
| Gallery 【列表拖拽框】提供一个供用户拖拽的列表框(不建议使用)
| AdapterViewFlipper 提供多个View组件,每次只能显示一个,可以通过showPrevious()和showNext()空只显示上一个下一个,StartFilpping()自动播放
| StackView 以"堆叠"的方式显示多个列表项,可以拖走或拖进位于顶端的View,可以通过showPrevious()和showNext()空只显示上一个下一个
5.Adapter接口及其实现类接口及其实现类
| ListAdapter Adapter子接口,为AbsListAdapter提供列表项
| ExpandableListAdapter 子接口,为ExpandableListView提供列表项
| 实现方法:1.扩展BaseExpandableListAdapter 实现ExpandableListAdapter
| 2.使用SimpleExpandableListAdapter 将两个List集合包装成ExpandableListAdapter
| 3.使用SimpleCursorTreeAdapter 将 Cursor数据包装成SimpleCursorTreeAdapter
| SpinnerAdapter Adapter子接口,为SpinnerAdapter提供列表项
| ArrayAdapter 简单易用的Adapter,用于将List集合的多个对象包装成多个列表项
|
| SimpleCursorAdapter 与SimpleAdapter类似,用于包装Cursor提供的数据
| BaseAdapter 通常用于拓展,可以达到对列表项的最大限度的定制
6.ProgressBar 【进度条组件】
| style="@android:style/Widget.ProgressBar.Large" 大环形进度条
| style="@android:style/Widget.ProgressBar.Small" 小环形进度条
| style="@android:style/Widget.ProgressBar.Horizontal" 水平进度条
| 调用Activity的requestWindowFeature() 标题栏进度条
| 入参为 Window.FEATURE_INDETERMINATE_PROGRESS 不带进度的进度条
| 入参为 Window.FEATURE_PROGRESS 带进度的进度条
7.SeekBar【拖动条组件】
8.RatingBar【星级评分条组件】
9.Toast【显示提示信息框】此提示信息不会获得焦点,过一段时间会自动消失
10.CalendarView 【日历视图】
11.SearchView 【搜索框】
12.TabHost 【选项卡】
需继承TabActivity,通过getTabHost()获取TabHost对象(不建议使用)
| TabWidget 代表选项卡的标签条
| TabSpec 代表选项卡的一个Tab页面
| newTabSpec() 创建选项卡
| addTab() 添加选项卡
13.Notification 显示在手机状态栏的通知
程序一般通过NotificationManager服务来发送Notification
Notification.Builder 创建Notification类
| setDefaults() 设置LED灯,音乐,震动等
| setAutoCancel() 设置点击通知后,状态栏自动删除通知
| setContentTitle() 方法设置通知标题
| setContentText() 方法设置通知内容
| setSmalllcon() 为通知设置图标
| setLargelcon() 为通知设置大图标
| setTick() 设置通知在状态栏提示的文本
| setContentIntent() 设置点击通知后将要启动的程序组件对应的PendingIntent
14.对话框
| AlertDialog 功能最丰富应用最广的对话框
| ProgressDialog 进度对话框,对简单进度条的封装
| DatePickerDialog 日期选择对话框,对DatePicker的封装
| TimePickerDialog 时间选择对话框,对TimePicker的封装
| activity android:theme="@android:style/Theme.Dialog"
15.PopupWindow 可以创建类似对话框风格的窗口
使用方法:调用PopupWindow构造器,创建PopupWindow对象. 调用PopupWindow的showAsDropDown(view)方法,作为view的下拉组件显示
调用PopupWindow的showAtLocation()方法,将PopupWindow在指定的位置显示
16.Menu 菜单
| option menu 选项菜单(最常规的菜单) 不支持勾选标记,不支持嵌套子菜单
| SubMenu 子菜单(点击了子菜单将弹出悬浮窗口显示子菜单项) 不支持菜单项图标,不支持嵌套子菜单
| ContextMenu 上下文菜单(长按视图控件出现的菜单) 不支持菜单快捷键和图标
| PopupMenu 弹出式菜单 默认会显示在该组件的上方或下方
| setCheckable(boolean) 设置菜单选项是否可以被勾选;setGroupCheckable()设置group组里的所有菜单是否可选
| setAlphabeticShortcut 设置字母快捷键;setNumberShortcut 设置数字快捷键;setShortcut() 同时设置两种快捷键
| setIntent() 启动其他Activity
17.ActionBar 活动条 Android不强制手机提供Menu键,无法打开菜单,可使用ActionBar作为解决方案,可将选项菜单显示成ActionItem
ActionBar除了可以显示普通ActionItem外,还可显示普通UI组件(定义ActionItem时使用android:actionViewClass属性指定ActionView实现类,使用android:actionLayout指定
ActionView对应的视图资源)
| 在AndroidManifest.xml的sdk配置中,如果指定了目标版本高于11(Android 3.0)会默认启用ActionBar
| android:theme="@android:style/Theme.Holo.NoActionBar" 关闭ActionBar
| setNavigationMode(ActionBar.NAVIGATION_MODE_TABS) 设置使用Tab方式导航
| setDisplayHomeAsUpEnabled(boolean) 设置是否将该应用程序图标转换成可点击图标,并在图标上添加一个向左箭头
| setDispalyOptions(int) 通过传入int控制ActionBar显示选项;setDisplayShowHomeEnabled(设置是否显示应用程序图标)
| setHomeButtonEnabled(boolean) 设置是否将该应用程序图标转换成可点击按钮
| setShowAsAction(int Action Enum) 设置是否将菜单显示在ActionBar上作为ActionItem
| SHOW_AS_ACTION_ALWAYS 总是将MenuItem显示在ActionBar上
| SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW 将该ActionView折叠成普通菜单项
| SHOW_AS_ACTION_IF_ROOM 当ActionBar位置足够时才显示MenuItem
| SHOW_AS_ACTION_NEVER 不将MenuItem显示在ActionBar上
| SHOW_AS_ACTION_WITH_TEXT 将MenuItem显示在ActionBar上,并显示该菜单文本
1.Activity
是Android应用中负责与用户交互的组件,相当于swing中的JFrame控件
| Fragment 可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的生命周期,单独处理自己的输入,在Activity运行的时候可以加载或者移除Fragment模块
对Android 3.0 以前的支持(引用 android.support.v4.app.Fragment)
| 在Activity中使用Fragment,需要将Fragment添加到Activity中,可以在布局文件中使用<fragment.../>元素添加;
也可在代码中使用FragmentTransaction的add()方法添加
| FragmentActivity,在早期版本使用Fragment,必须借助FragmentActivity的支持,只有使用该类的getSupportFragmentManager()方法才能获得 FragmentManager管理器ViewPager 它是Fragment的容器,可同时管理多个Fragment.并允许多个Fragment切换时提供动画效果
FragmentPagerAdpater Adpater类用于为ViewPager提供多个Fragment,通常用于扩展
| getActivity()方法,获取Fragment所在的Activity
| 不同场景下的Fragment子类
| DialogFragment 对话框界面的Fragment
| ListFragment 实现列表界面的Fragment
| PreferenceFragment 选项设置界面的Fragment
| WebViewFragment WebView界面的Fragment
| onAttach() 当Fragment被添加到Activity中时被调用
| onCreate() 系统创建Fragment对象后回调该方法,用于初始化.
| onCreateView() 当Fragment绘制界面组件时回调该方法
| onActivityCreated() 当Fragment所在的Activity被启动完成后回调该方法
| onStart() 启动Fragment时被回调
| onResume() 恢复Fragment时被回调
| onPause() 当用户离开该Fragment时回调该方法
| onStop() 停止Fragment时被回调
| onDestoryView() 销毁该Fragment所包含的View时被调用
| onDestory() 销毁Fragment时被调用
| onDeatch() 将该Fragment从Activity中被删除,被替换完成后调用该方法
| FragmentManager.findFramentById()/findFragmentByTag()获取指定的Fragment
| 调用Fragment的setArguments(Bundle bundle) 可将Activity中的数据传递给Activity
| 不同场景下的Activity的子类
| FragmentActivity 实现账户管理界面
| ListActivity 实现列表界面
| LauncherActivity 实现Activity界面的Activity,当点击列表项时,所对应的Activity被启动
| AliasActivity 启动其他Activity时结束自己
| ExpandableListActivity 实现可扩展列表界面
| ExpandableListActivityTest 显示一个可扩展的列表窗口
| TabActivity 实现Tab界面
| setContent(int viewId) 直接将指定的View组件设置成Tab的Content
| setContent(Intent intent) 直接指定Intent对应的Activity设置成Tab的Content
| PreferenceActivity 实现程序参数设置,存储界面的Activity
| PreferenceActivityTest 显示一个显示设置选项参数并进行保存的窗口
| android:launchMode
| standard 标准模式,每次创建一个新的Activity实例,并添加到当前Task栈中
| singleTop Task顶单例模式,与standard类似,如果Activity以处于Task栈顶,系统不会创建新的Activity,直接复用已有的Activity
| singleTask Task内单例模式,同一个Task栈中只有一个Activity实例
| singleInstance 全局单例模式,无论从哪个Task栈中启动Activity,只会创建一个Activity实例
| onCreate(Bundle b) 创建Activity时被回调,只调用一次
| onStart() 启动Activity时被回调
| onRestart() 重新启动Activity时被回调
| onPause() 暂停Activity时被回调
| onStop() 停止Activity时被回调
| onDestory() 销毁Activity时被回调,只调用一次
| startService(Intent intent) 启动指定service
| stopService(Intent intent) 停止指定service
2.View
是所有UI控件,容器控件的基类,是Android应用中用户实实在在看到的部分
3.Service
与Activity的地位并列.Service位于后台,需要继承Service基类,一般不与用户交互
| 生命周期
| IBinder onBind(Intent intent) Service子类必须实现的方法,方法返回一个IBinder对象,应用程序可通过该对象与Service通讯
| void onCreate() 当该Service第一次被创建后立即回调该方法
| void onDestroy() 当该Service被关闭之前会回调该方法
| void onStartCommand(Intent,int flag,int startId) 每次客户端调用startService(Intent intent)方法启动Service时会回调该方法
| boolean onUnbind(Intent intent) Service上绑定的所有客户端都断开连接时回调该方法
| 子类
| IntentService
| 创建单独的worker线程处理所有Intent请求
| 创建单独的worker线程处理onHandleIntent()方法实现的代码,开发者无需处理多线程问题
| 处理完所有请求后IntentService会自动停止
| 为Service onBind方法提供了默认的实现,返回null
| 为Service onStartCommand方法提供了默认实现,该实现会将请求intent添加到队列中
| AIDL Service 跨进程访问Service
| AIDL 定义接口的源码必须以.aidl结尾
| AIDL 接口中用到的数据类型,除了基本数据类型,String,List,Map,CharSequence之外,其他类型全部需要倒包,即使在同一个包下也需要
| 将接口暴露给客户端
| 定义AIDL接口并定义Service实现,并在AndroidManifest.xml中配置
| 客户端访问AIDL Service
| 创建ServiceConnection对象
| 以ServiceConnection对象作为参数,调用Context的bindService方法,绑定远程service
| 实现Parcelable接口,(相当于java实现Serializable) 序列化
| startService(intent)/stopService(intent) 启动/停止指定service Service和访问者无法进行数据交换
| bindService()/unbindService 启动/停止指定service Service和访问者可以进行数据交换
4.BroadcastReceive(广播接收器)
类似于事件编程中的监听器,其事件源是Android应用中的其他组件
| 使用步骤
| 创建需要启动的BroadcastReceive的Intent
| 调用Context的sendBroadcast()或sendOrderedBroadcast() 方法启动指定的BroadcastReceive
| Broadcast
| Normal Broadcast 普通广播 异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递效率比较高
| sendBroadcast() 发送Normal Broadcast
| Ordered Broadcast 有序广播 按声明的优先顺序依次接收Broadcast
| sendOrderedBroadcast() 发送Ordered Broadcast
| 接收系统广播
| ACTION_TIME_CHANGED 系统时间改变
| ACTION_DATE_CHANGED 系统日期改变
| ACTION_TIMEZONE_CHANGED 系统时区改变
| ACTION_BOOT_COMPLETED 系统启动完成
| ACTION_PACKAGE_ADDED 系统添加包
| ACTION_PACKAGE_CHANGED 系统包改变
| ACTION_PACKAGE_REMOVED 系统包删除
| ACTION_PACKAGE_RESTART 系统包重启
| ACTION_PACKAGE_DATA_CLEARED 系统包的数据被清理
| ACTION_BATTERY_CHANGED 电池电量改变
| ACTION_BATTERY_LOW 电池电量低
| ACTION_POWER_CONNECTED 系统连接电源
| ACTION_POWER_DISCONNECTED 系统与电源断开
| ACTION_SHUTDOWN 系统被关闭
5.ContentProvider(数据共享机制)
应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.
通常与ContentResolve结合使用,一个应用通过ContentResolve暴露数据,另一个应用通过ContentProvider接收数据
6.Intent IntentFilter
Intent Android应用内组件相互通信的载体. IntentFilter判断被调用组件是否符合隐式Intent
| 启动组件
| 启动Activity
| startActivity(Intent i),startActivityForResult(Intent i,int code)
| 启动Service
| ComponetName startService(Intent i),boolean bindService(Intent i,ServiceConnection conn,int falg)
| 启动BroadcastReceiver Broadcast
| sendBroadcast();senOrderedBroadcas();sendStickyBroadcast()
| <intent-filter.../>元素是AndroidManifest.xml文件中<activity../>元素的子元素,用于配置该Activity所能响应的Intent
| 属性
| Component(显示Intent) 接受一个ComponentName对象 指定包名,类名创建一个可以唯一确定的组件类
| Action 代表Intent所要完成的一个抽象的动作
| Category 为Action增加额外的附加类别信息
| Data 向Action属性提供操作的数据(形式: scheme://host:port/path)
| Type 指定Data所指定的Uri对应的MIME类型,这种MIME可以使任意自定义类型
| AndroidManifest.xml文件为组件声明Data,Type属性都是通过<data.../>元素
| mimeType="" 声明该组件所能匹配的Intent的Type属性
| scheme"" 声明该组件所能匹配的Intent的Type属性
| host="" 声明该组件所能匹配的Intent的Data属性的scheme部分
| post="" 声明该组件所能匹配的Intent的Data属性的post部分
| path="" 声明该组件所能匹配的Intent的Data属性的path部分
| pathPrefix="" 声明该组件所能匹配的Data属性的path前缀部分
| pathPattern="" 声明该组件所能匹配的Data属性的path后缀部分
| Extra 用于多个Action之间的数据交换,该属性值是一个Bundle对象
| Flag 用于为该Intent添加一些额外的控制旗标
| 可调用addFlags()方法为Intent添加旗标
| setClass() 设置Intent要启动的组件对应的类
| setClassName() 设置Intent要启动的组件对应的类名
7.资源管理器
| TelephonyManager 电话管理器
| TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
| SmsManager 短息管理器
| sendXxxMessage() 发送短息
| AudioManager 音频管理器
| adjuStreamVolume(int streamType,int direction,int flags) 调整手机指定类型的声音
| streamType指定声音类型
| STREAM_ALARM 手机闹铃声音
| STREAM_DTMF DTMF音调的声音
| STREAM_MUSIC 手机音乐的声音
| STREAM_NOTIFICATION 系统提示的声音
| STREAM_RING 电话铃声的声音
| STREAM_SYSTEM 手机系统的声音
| STREAM_VOICE_CALL 语音电话的声音
| direction 指定对声音增大还是减少
| flags 调整声音时的标识,FLAG_SHOW_UI 指定调整声音时显示音量进度条
| setMicrophoneMute(boolean on) 设置是否让麦克风静音
| setMode(int mode) 设置声音模式,NORML,RINGTONE,IN_CALL
| setRingerMode(int ringerMode) 设置手机的电话铃声的模式
| RINGER_MODE_MORMAL 正常的手机铃声
| RINGER_MODE_SILENT 手机铃声静音
| RINGER_MODE_VIBRATE 手机震动
| setSpeakerphoneOn(boolean on) 设置是否打开扩音器
| setStreamMute(int streamType,boolean status) 将手机指定类型的声音调整为静音
| setStreamVolume(int streamType,int index,int flags)直接设置手机的指定类型的音量值
| Vibrator 振动器
| vibrator = (Vibrator)getSystemService(Service.VIBRATOR_SERVICE);
| vibrate(long milliseconds) 控制手机震动毫秒数
| vibrate(long[] pattern,int repeat) 指定手机以pattern指定的模式震动
| cancel() 关闭手机震动
| AlarmManager 手机闹钟服务
| alarmManager = (AlarmManager)getSystemService(Service.ALARM_SERVICE);
| set(int type,long triggerAtTime,PendingIntent operation) 设置在triggerAtTime时间启动operation参数指定的组件
| triggerAtTime指定定时服务的类型
| ELAPSED_REALTIME 指定从现在时间过了一段时间后启动operation所对应的组件
| ELAPSED_REALTIME_WAKEUP 指定从现在开始时间过了一段时间后启动operation所对应的组件 系统关机也执行
| RTC 指定当系统调用System.currentTimeMillis()方法返回值与triggerAtTime相等时启动operation所对应的组件
| RTC_WAKEUP 指定当系统调用System.currentTimeMillis()方法返回值与triggerAtTime相等时启动operation所对应的组件 系统关机也执行
| setInexactRepeating(int type,long triggerAtTime,long interval,PendingIntent operation) 设置一个非常精确的周期任务,
| setRepeating(int type,long triggerAtTime,long interval,PendingIntent operation) 设置一个周期性执行的系统任务
| cancel(PendingIntent operation) 取消AlarmManager的定时服务
二.UI组件
布局组件
1.LinearLayout 线性布局
将容器里的组件一个挨一个排起来(可控制横向排列或纵向排列)
2.TableLayout 表格布局
采用行,列的形式管理UI组件,其中一个TableRow代表一行
3.FrameLayout 帧布局
为每个组件创建一个空白区域(称为一帧),每个组件占用一帧
| ViewAnimator 可以在View切换时出现动画效果
| ViewFlipper 视图切换,出现动画效果
| ViewSwitcher 【视图切换组件】,多个View叠在一个,每次显示一个View
| ImageSwitcher 【图像切换器组件】
| TextSwitcher 【文本切换器组件】
| DatePicker 【日期选择器】
| TimePicker 【时间选择器】
| NumberPicker 【数值选择器】 用户可以键盘输入,也可以拖拽选择数值
| ScrollView 【垂直滚动视图】 为普通组件添加滚动条,其中最多只能包含一个组件
| HorizontalScrollView【水平滚动视图】 为普通组件添加滚动条,其中最多只能包含一个组件
4.RelativeLayout 相对布局
其内组件总是相对相对兄弟组件,父容器来决定位置
5.GridLayout 网格布局(4.0新增)
相当于html中的table标签,将整个容器划分成 row * column 个网格,每个网格可放一个组件,也可设置组件跨多少列多少行
6.AbsoluteLayout 绝对布局
通过自定义X坐标与Y坐标控制组件位置
TextView组件
1.TextView 【显示文本框】
| CheckedTextView 【提供勾选显示文本框】
| Button 【按钮】 使用9patch图片可设置图片拉伸过程中不被改变的部分
| RadioButton【单选按钮】一般与RadioGroup联合使用,保证一组单选按钮只能选中一个
| CheckBox 【复选按钮】
| ToggleButton 【状态开关按钮】提供两种状态,通常用于程序中状态切换
| Switch 【开关按钮】
| DigitalClock 【数字时钟】
| AnalogClock 【模拟时钟】不显示当前秒数
| Chronometer 【计时器】
TextView没有边框,实现边框可通过设置背景实现
2.EditText 【用户输入文本框】
| AutoCompleteTextView 【自动完文本框】
| MultiAutoCompleteTextView 【自动完文本框】允许输入多个提示项,多个提示项以逗号分隔
| ExtractEditText 【EditText的底层服务】
3.ImageView 【显示图片文本框】
| ImageButton 【图片按钮】
| ZoomButton 【放大/缩小按钮】
| QuickContackBadge【关联联系人按钮】
4.AdapterView 抽象基类,用于列表显示
| ListView 【列表组件】 直接使用
| ExpandableListView 【可扩展的列表组件】他把列表项分为几组,每组又可包含多个列表项
| ListActivity 【列表抽象类】用于Activity继承
| Spinner 【列表选择框】提供一个供用户选择的列表框
| Gallery 【列表拖拽框】提供一个供用户拖拽的列表框(不建议使用)
| AdapterViewFlipper 提供多个View组件,每次只能显示一个,可以通过showPrevious()和showNext()空只显示上一个下一个,StartFilpping()自动播放
| StackView 以"堆叠"的方式显示多个列表项,可以拖走或拖进位于顶端的View,可以通过showPrevious()和showNext()空只显示上一个下一个
5.Adapter接口及其实现类接口及其实现类
| ListAdapter Adapter子接口,为AbsListAdapter提供列表项
| ExpandableListAdapter 子接口,为ExpandableListView提供列表项
| 实现方法:1.扩展BaseExpandableListAdapter 实现ExpandableListAdapter
| 2.使用SimpleExpandableListAdapter 将两个List集合包装成ExpandableListAdapter
| 3.使用SimpleCursorTreeAdapter 将 Cursor数据包装成SimpleCursorTreeAdapter
| SpinnerAdapter Adapter子接口,为SpinnerAdapter提供列表项
| ArrayAdapter 简单易用的Adapter,用于将List集合的多个对象包装成多个列表项
|
| SimpleCursorAdapter 与SimpleAdapter类似,用于包装Cursor提供的数据
| BaseAdapter 通常用于拓展,可以达到对列表项的最大限度的定制
6.ProgressBar 【进度条组件】
| style="@android:style/Widget.ProgressBar.Large" 大环形进度条
| style="@android:style/Widget.ProgressBar.Small" 小环形进度条
| style="@android:style/Widget.ProgressBar.Horizontal" 水平进度条
| 调用Activity的requestWindowFeature() 标题栏进度条
| 入参为 Window.FEATURE_INDETERMINATE_PROGRESS 不带进度的进度条
| 入参为 Window.FEATURE_PROGRESS 带进度的进度条
7.SeekBar【拖动条组件】
8.RatingBar【星级评分条组件】
9.Toast【显示提示信息框】此提示信息不会获得焦点,过一段时间会自动消失
10.CalendarView 【日历视图】
11.SearchView 【搜索框】
12.TabHost 【选项卡】
需继承TabActivity,通过getTabHost()获取TabHost对象(不建议使用)
| TabWidget 代表选项卡的标签条
| TabSpec 代表选项卡的一个Tab页面
| newTabSpec() 创建选项卡
| addTab() 添加选项卡
13.Notification 显示在手机状态栏的通知
程序一般通过NotificationManager服务来发送Notification
Notification.Builder 创建Notification类
| setDefaults() 设置LED灯,音乐,震动等
| setAutoCancel() 设置点击通知后,状态栏自动删除通知
| setContentTitle() 方法设置通知标题
| setContentText() 方法设置通知内容
| setSmalllcon() 为通知设置图标
| setLargelcon() 为通知设置大图标
| setTick() 设置通知在状态栏提示的文本
| setContentIntent() 设置点击通知后将要启动的程序组件对应的PendingIntent
14.对话框
| AlertDialog 功能最丰富应用最广的对话框
| ProgressDialog 进度对话框,对简单进度条的封装
| DatePickerDialog 日期选择对话框,对DatePicker的封装
| TimePickerDialog 时间选择对话框,对TimePicker的封装
| activity android:theme="@android:style/Theme.Dialog"
15.PopupWindow 可以创建类似对话框风格的窗口
使用方法:调用PopupWindow构造器,创建PopupWindow对象. 调用PopupWindow的showAsDropDown(view)方法,作为view的下拉组件显示
调用PopupWindow的showAtLocation()方法,将PopupWindow在指定的位置显示
16.Menu 菜单
| option menu 选项菜单(最常规的菜单) 不支持勾选标记,不支持嵌套子菜单
| SubMenu 子菜单(点击了子菜单将弹出悬浮窗口显示子菜单项) 不支持菜单项图标,不支持嵌套子菜单
| ContextMenu 上下文菜单(长按视图控件出现的菜单) 不支持菜单快捷键和图标
| PopupMenu 弹出式菜单 默认会显示在该组件的上方或下方
| setCheckable(boolean) 设置菜单选项是否可以被勾选;setGroupCheckable()设置group组里的所有菜单是否可选
| setAlphabeticShortcut 设置字母快捷键;setNumberShortcut 设置数字快捷键;setShortcut() 同时设置两种快捷键
| setIntent() 启动其他Activity
17.ActionBar 活动条 Android不强制手机提供Menu键,无法打开菜单,可使用ActionBar作为解决方案,可将选项菜单显示成ActionItem
ActionBar除了可以显示普通ActionItem外,还可显示普通UI组件(定义ActionItem时使用android:actionViewClass属性指定ActionView实现类,使用android:actionLayout指定
ActionView对应的视图资源)
| 在AndroidManifest.xml的sdk配置中,如果指定了目标版本高于11(Android 3.0)会默认启用ActionBar
| android:theme="@android:style/Theme.Holo.NoActionBar" 关闭ActionBar
| setNavigationMode(ActionBar.NAVIGATION_MODE_TABS) 设置使用Tab方式导航
| setDisplayHomeAsUpEnabled(boolean) 设置是否将该应用程序图标转换成可点击图标,并在图标上添加一个向左箭头
| setDispalyOptions(int) 通过传入int控制ActionBar显示选项;setDisplayShowHomeEnabled(设置是否显示应用程序图标)
| setHomeButtonEnabled(boolean) 设置是否将该应用程序图标转换成可点击按钮
| setShowAsAction(int Action Enum) 设置是否将菜单显示在ActionBar上作为ActionItem
| SHOW_AS_ACTION_ALWAYS 总是将MenuItem显示在ActionBar上
| SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW 将该ActionView折叠成普通菜单项
| SHOW_AS_ACTION_IF_ROOM 当ActionBar位置足够时才显示MenuItem
| SHOW_AS_ACTION_NEVER 不将MenuItem显示在ActionBar上
| SHOW_AS_ACTION_WITH_TEXT 将MenuItem显示在ActionBar上,并显示该菜单文本