对话框顾名思义即人与应用系统对话交互的窗口,登录操作中检查用户信息输入情况可以用对话框进行提示,退出应用时也可以弹出一个退出确认对话框。只要涉及到交互的地方都可以使用对话框.
下面我们一起学习Android系统中常用对话框以及实现方式.
一、Android常用对话框结构图
![QQ截图20150702145915](http://it.warmtel.com/wp-content/uploads/2015/07/QQ%E6%88%AA%E5%9B%BE20150702145915.png)
1、常用确认对话框 2、日期对话框
![QQ截图20150702150531](http://it.warmtel.com/wp-content/uploads/2015/07/QQ%E6%88%AA%E5%9B%BE20150702150531.png)
3、单选对话框 4、多选对话框
![QQ截图20150702150603](http://it.warmtel.com/wp-content/uploads/2015/07/QQ%E6%88%AA%E5%9B%BE20150702150603.png)
5、自定义对话框
![QQ截图20150702150543](http://it.warmtel.com/wp-content/uploads/2015/07/QQ%E6%88%AA%E5%9B%BE20150702150543.png)
二、对话框实现方式
1.首先实例化对话框,设置相关属性.
如:
1 | ProgressDialog mProgressDialog = new ProgressDialog( this ); |
2 | mProgressDialog.setMessage( "信息下载加载中...." ); |
3 | mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); |
2.调用show方法显示.
1 | mProgressDialog.show(); |
3.调用dismiss方法隐藏
1 | mProgressDialog.dismiss(); |
三、AlertDialog对话框实例化与相关属性设置
01 | AlertDialog.Builder builder = new AlertDialog.Builder( this ); |
02 | builder.setTitle( "操作提示" ); |
03 | builder.setMessage( "是否退出?" ); |
05 | builder.setNegativeButton( "取消" , |
06 | new DialogInterface.OnClickListener() { |
08 | public void onClick(DialogInterface dialog, int which) { |
09 | Toast.makeText(DialogAcitivity. this , "取消" , |
10 | Toast.LENGTH_SHORT).show(); |
14 | AlertDialog dialog = builder.create(); |
android中setPositiveButton、setNegativeButton和setNeutralButton的区别是什么?
在对话框中出现的位置不同setPositiveButton出现在最右,Button功能设置为”确定”; setNegativeButton设置的是出现在最左,一般把最右的button功能设置为“取消”,也就是调用dismiss();setNeutralButton如果设置则出现在”中间”。
系统对话框一般由三部份组成,标题区域,内容区域,按钮事件处理区域
四、自定义对话框实现
![QQ截图20150702150543](http://it.warmtel.com/wp-content/uploads/2015/07/QQ%E6%88%AA%E5%9B%BE20150702150543.png)
1.定义一个类继承AlertDialog
01 | public class MyWeixinDialog extends AlertDialog { |
02 | private Activity mContext; |
03 | public MyWeixinDialog(Activity context) { |
09 | protected void onCreate(Bundle savedInstanceState) { |
10 | super .onCreate(savedInstanceState); |
11 | setContentView(R.layout.exit_dialog); |
12 | Button confirm = (Button) findViewById(R.id.exitBtn0); |
13 | Button cancel = (Button) findViewById(R.id.exitBtn1); |
15 | confirm.setOnClickListener( new View.OnClickListener() { |
18 | public void onClick(View v) { |
23 | cancel.setOnClickListener( new View.OnClickListener() { |
26 | public void onClick(View v) { |
01 | <?xml version= "1.0" encoding= "UTF-8" ?> |
03 | android:id= "@+id/exit_layout" |
04 | android:layout_width= "280dp" |
05 | android:layout_height= "wrap_content" |
06 | android:background= "@drawable/confirm_dialog_bg2" |
07 | android:gravity= "center_horizontal" |
08 | android:layout_gravity= "center_horizontal" |
09 | android:orientation= "vertical" > |
12 | android:layout_width= "wrap_content" |
13 | android:layout_height= "wrap_content" |
14 | android:layout_marginTop= "4dp" |
17 | android:textColor= "#333" |
18 | android:textSize= "20sp" /> |
21 | android:layout_width= "wrap_content" |
22 | android:layout_height= "wrap_content" |
23 | android:layout_marginTop= "1dp" |
24 | android:gravity= "center_horizontal" |
25 | android:padding= "10dp" |
26 | android:text= "退出后,你将收不到新的消\n息.确定要退出?" |
27 | android:textColor= "#333" |
28 | android:textSize= "16sp" /> |
31 | android:layout_width= "wrap_content" |
32 | android:layout_height= "wrap_content" |
33 | android:layout_marginBottom= "8dp" |
34 | android:layout_marginTop= "33dp" > |
37 | android:id= "@+id/exitBtn0" |
38 | android:layout_width= "110dp" |
39 | android:layout_height= "wrap_content" |
40 | android:background= "@drawable/btn_style_green" |
41 | android:gravity= "center" |
42 | android:onClick= "exitbutton0" |
44 | android:textColor= "#fff" |
45 | android:textSize= "16sp" /> |
48 | android:id= "@+id/exitBtn1" |
49 | android:layout_width= "110dp" |
50 | android:layout_height= "wrap_content" |
51 | android:layout_marginLeft= "10dp" |
52 | android:background= "@drawable/btn_style_white" |
53 | android:gravity= "center" |
54 | android:onClick= "exitbutton1" |
56 | android:textColor= "#333" |
57 | android:textSize= "16sp" /> |
2.实例化
1 | Dialog weixinDialog = new MyWeixinDialog( this ); |
3.显示
五、对话框与Activity绑定
Activities提供了一种方便管理的创建、保存、回复的对话框机制,例如onCreateDialog(int),onPrepareDialog(int,Dialog),showDialog(int),dismissDialog(int)等方法,如果使用这些方法的话,Activity将通过getOwnerActivity()方法返回该Activity管理的对话框(dialog).
onCreateDialog(int):当你使用这个回调函数时,Android系统会有效的设置这个Activity为每个对话框的所有者,从而自动管理每个对话框的状态并挂靠到Activity上。这样,每个对话框继承这个Activity的特定属性。比如,当一个对话框打开时,菜单键显示为这个Activity定义的选项菜单,音量键修改Activity使用的音频流。
showDialog(int):当你想要显示一个对话框时,调用showDialog(intid)方法并传递一个唯一标识这个对话框的整数。当对话框第一次被请求时,Android从你的Activity中调用onCreateDialog(intid),你应该在这里初始化这个对话框Dialog。这个回调方法被传以和showDialog(intid)相同的ID。当你创建这个对话框后,在Activity的最后返回这个对象。
onPrepareDialog(int,Dialog):在对话框被显示之前,Android还调用了可选的回调函数onPrepareDialog(intid,Dialog).如果你想在每一次对话框被打开时改变它的任何属性,你可以定义这个方法。这个方法在每次打开对话框时被调用,而onCreateDialog(int)仅在对话框第一次打开时被调用。如果你不定义onPrepareDialog(),那么这个对话框将保持和上次打开时一样。这个方法也被传递以对话框的ID,和在onCreateDialog()中创建的对话框对象。
dismissDialog(int):当你准备关闭对话框时,你可以通过对这个对话框调用dismiss()来消除它。如果需要,你还可以从这个Activity中调用dismissDialog(intid)方法,这实际上将为你对这个对话框调用dismiss()方法。如果你想使用onCreateDialog(intid)方法来管理你对话框的状态(就如同在前面的章节讨论的那样),然后每次你的对话框消除的时候,这个对话框对象的状态将由该Activity保留。如果你决定不再需要这个对象或者清除该状态是重要的,那么你应该调用removeDialog(intid)。这将删除任何内部对象引用而且如果这个对话框正在显示,它将被消除。
在Activity类中调用showDialog(1)方法时系统会自动调用onCreateDialog方法创建Dialog显示
我们只需在onCreateDialog方法中实现返回Dialog.
2 | protected Dialog onCreateDialog( int id) { |
5 | return new DatePickerDialog(); |
六、对话框最优实现方式采用DialogFragment实现如下:
03 | * MyAlertDialogFragment dialogFragment = new MyAlertDialogFragment(); |
04 | * dialogFragment.show(getFragmentManager(), "dialog"); |
07 | public class MyAlertDialogFragment extends DialogFragment { |
09 | public void onCreate(Bundle savedInstanceState) { |
10 | super .onCreate(savedInstanceState); |
14 | public View onCreateView(LayoutInflater inflater, ViewGroup container, |
15 | Bundle savedInstanceState) { |
17 | View v = inflater.inflate(R.layout.article_view, container, false ); |
18 | View tv = v.findViewById(R.id.article); |
19 | ((TextView)tv).setText(mTitle); |
25 | public Dialog onCreateDialog(Bundle savedInstanceState) { |
27 | return new AlertDialog.Builder(getActivity()) |
28 | .setIcon(android.R.drawable.ic_dialog_alert) |
30 | .setPositiveButton(android.R.string.ok, |
31 | new DialogInterface.OnClickListener() { |
32 | public void onClick(DialogInterface dialog, |
34 | Toast.makeText(getActivity(), "确定" , |
35 | Toast.LENGTH_SHORT).show(); |
38 | .setNegativeButton(android.R.string.cancel, |
39 | new DialogInterface.OnClickListener() { |
40 | public void onClick(DialogInterface dialog, |
42 | Toast.makeText(getActivity(), "取消" , |
43 | Toast.LENGTH_SHORT).show(); |
调用
1 | MyAlertDialogFragment dialogFragment = new MyAlertDialogFragment(); |
2 | dialogFragment.show(getFragmentManager(), "dialog" ); |