android 新手,学习笔记.
在andorid5.0之后,Google重新设计了系统的对话框, 相比旧系统版本的对话框,新版的对话框漂亮了很多,如果不限定版本,所有版本都能使用新特性, 则需要使用Appcompat兼容库,AppCompat 有自己的AlertDialog实现类,它和andoird操作系统内置版AlertDialog类似,导入AlertDialog时, 我们使用androi.support.v7.app.AlertDialog。
创建DialogFragment
建议将AlertDialog封装成DialogFragment实例中使用,当然不使用DialogFragment也可以显示AlertDialog视图,但不推荐这样做,使用FragmentManager管理对话框,可以更灵活的展示对话框,另外如果设备旋转,单独使用AlertDialog会消失,而封装在fragment 中的AlertDialog会被重建恢复。
public class DatePickerFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setTitle(R.string.date_picker_title)
.setPositiveButton(android.R.string.ok,null)
.create();
}
}
以上代码中使用AlertDialog.Builder类,创建AlertDialog实例。
然后调用下面两个AlertDialog.Builder方法,配置对话框
public AlertDialog.Builder setTitle (int titleId)
public AlertDialog.Builder setPositiveButton(int textId,DialogInterface.OnclickListener listener)
要讲DialogFragment添加给FragmentManager管理并放到屏幕上,可调用fragment实例的一下方法
public void show(FragmentManager manager,String tag)
public void show(FragmentTransaction transaction,String tag)
两种方法任你选择, 如果传入FragmentTransaction ,需要自己创建并提交事务
如果传入FragmentManager,系统会自动创建并提交事务。
FragmentManager manager = getFragmentManager();
DatePickerFragment picker = new DatePickerFragment();
picker.show(manager, DIALOG_DATE);
* 此处一定要注意:DatePickerFragment 所继承的DialogFragment是v4 包下,如果导入的是app包下的,则上面的show方法会报错。
接下来,使用AlertDialog.Builder的setView()方法,添加DatePicker组件给AlertDialog对话框:
public AlertDialog.Builder setView(View vuew)
该方法配置对话框,实现在对话框中标题栏与按钮之间显示传入的View对象。
创建布局文件dialog_date.xml
<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:calendarViewShown="false"
android:id="@+id/dialog_date_picker"
android:layout_height="wrap_content">
DatePicker>
然后在DatePickerFragment的 onCreateDialog()方法内,实例化DatePicker视图并添加给对话框
@override
public Dialog onCreateDialog(Bundle savedInstanceState){
View view = LayoutInflater.from(getActivity())
.inflate(R.layout.dialog_date,null);
return new AlertDialog.Builder(getActivity())
.setView(view)
.setTitle(R.string.date_picker.title)
.setPosiveButton(android.R.string.ok,null)
.create();
}