1. Dialog是对话框的基类,当我们需要定制Dialog是可以继承该类。由于Android提供了内置的对话框,方便我们的开发,所以很少会继承Dialog,而是继承内置Dialog子类。
1) AlertDialog提示框:可含最多3个按钮;支持多选、单选按钮;支持UI交互View等。
2) ProgressDialog:继承于AlertDialog,实现进度条功能
3) DatePickerDialog:选择日期。
4) TimePickerDialog:选择时间。
2. 首先对Dialog使用技术进行介绍,然后再学习每一种Dialog。
1) Android系统默认提供了Activity与Dialog的关联技术,即Activity管理了Dialog,同时Dialog也继承了Activity的属性,例如主题等。
所以在Activity的onCreateDialog(int)回调函数中实例化Dialog则意味着Activity与该Dialog关联。
如果在onCreateDialog(int)之外定义Dialog,调用Dialog. setOwnerActivity(Activity)可实现关联。
2) 通过showDialog(int)即可显示对话框,参数int与onCreateDialog的参数一致,表示与Dialog对应的ID。
每一次调用showDialog时,传递一个参数int值去创建Dialog,只有当第一次创建该Dialog时,系统才会调用onCreateDialog。而onPrepareDialog(int, Dialog)每次都会被调用。
3) 通过调用Dialog.dismiss或者是Activity.dismissDialog(int)来删除Dialog,即回收它的资源。但如果Dialog已经和Activity关联,即使dismiss之后,Activity仍然保留Dialog引用,调用removeDialog即可删除该引用,也就回收了资源。
如果你想在Dialog.dismiss时执行一些任务,实现DialogInterface.OnDismissListener的onDismiss(DialogInterface)然后再调用Dialog.setOnDismissListener。
当用户点击返回按钮或者是对话框下的取消按钮时,onDismiss仍然被调用。你可区别该行为与调用dismiss行为,用DialogInterface.OnCancelListener 设置setOnCancelListener()来监听取消行为。
3. 创建AlertDialog
1) AlertDialog特点,可以有标题Title,有提示内容Message,支持最多3个按钮,支持单选、多选列表。其中按钮分positive, neutral和negative
2) 创建AlertDialog 通常使用AlertDialog.Builder,通过AlertDialog.Builder(Context)获取。如何使用AlertDialog.Builder呢?例如在onCreateDialog中实现创建AlertDialog的代码:
3) 实现列表功能的Dialog
4) 如何支持单选和多选的列表的Dialog
调用setMultiChoiceItems()和setSingleChoiceItems(),比多个参数,即默认check项。
如何根据Activity的生命周期保存Dialog的单选、多选状态是值得关注的。
4. 创建ProgressDialog,它分两种进度条,一种是不确定等待,一种是确定等待。
1) 不确定等待
2) 确定等待
接下来是调用progressDialog.show或者是在onCreateDialog返回progressDialog。
最后可通过setProgress(int)和incrementProgressBy(int)更改进度。
通常是实现是Thread与Handler交互方式。
5. 创建DatePickerDialog和创建TimePickerDialog还是比较简单的,建议看官网的使用向导。
6. 当默认的对话框UI不能满足你的要求,或者你需要个性化的UI。dialog.setContentView和dialog.findViewById能够派上用场。
但通常创建AlertDialog使用的是它的Bulider,但Builder没有setContentView函数,但有setView成员,它接收View参数。
LayoutInflater能够将ViewGroup资源转换为View对象。获取LayoutInflater的方法是 getLayoutInflater() 或者getSystemService(LAYOUT_INFLATER_SERVICE )。