对话框DiaLog

Android对话框Dialog

对话框顾名思义即人与应用系统对话交互的窗口,登录操作中检查用户信息输入情况可以用对话框进行提示,退出应用时也可以弹出一个退出确认对话框。只要涉及到交互的地方都可以使用对话框.

下面我们一起学习Android系统中常用对话框以及实现方式.

一、Android常用对话框结构图
QQ截图20150702145915
1、常用确认对话框                                   2、日期对话框
QQ截图20150702145225  QQ截图20150702150531

3、单选对话框                                              4、多选对话框

QQ截图20150702150553  QQ截图20150702150603

5、自定义对话框

QQ截图20150702150543

二、对话框实现方式
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("是否退出?");
04     //设置按钮事件
05     builder.setNegativeButton("取消",
06         new DialogInterface.OnClickListener() {
07          @Override
08          public void onClick(DialogInterface dialog, int which) {
09            Toast.makeText(DialogAcitivity.this"取消",
10                Toast.LENGTH_SHORT).show();
11          }
12     });
13     //创建对话框
14     AlertDialog dialog = builder.create();

android中setPositiveButton、setNegativeButton和setNeutralButton的区别是什么?
在对话框中出现的位置不同setPositiveButton出现在最右,Button功能设置为”确定”; setNegativeButton设置的是出现在最左,一般把最右的button功能设置为“取消”,也就是调用dismiss();setNeutralButton如果设置则出现在”中间”。

系统对话框一般由三部份组成,标题区域,内容区域,按钮事件处理区域
四、自定义对话框实现

QQ截图20150702150543
1.定义一个类继承AlertDialog

01 public class MyWeixinDialog extends AlertDialog {
02   private Activity mContext;
03   public MyWeixinDialog(Activity context) {
04     super(context);
05     mContext = context;
06   }
07  
08   @Override
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);
14  
15     confirm.setOnClickListener(new View.OnClickListener() {
16  
17      @Override
18      public void onClick(View v) {
19        mContext.finish();
20      }
21     });
22  
23     cancel.setOnClickListener(new View.OnClickListener() {
24  
25      @Override
26      public void onClick(View v) {
27        dismiss();
28      }
29     });
30   }
31 }
01 <?xml version="1.0" encoding="UTF-8"?>
02 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
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" >
10  
11     <TextView
12         android:layout_width="wrap_content"
13         android:layout_height="wrap_content"
14         android:layout_marginTop="4dp"
15         android:padding="5dp"
16         android:text="退出微信"
17         android:textColor="#333"
18         android:textSize="20sp" />
19  
20     <TextView
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" />
29  
30     <LinearLayout
31         android:layout_width="wrap_content"
32         android:layout_height="wrap_content"
33         android:layout_marginBottom="8dp"
34         android:layout_marginTop="33dp" >
35  
36         <Button
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"
43             android:text="是"
44             android:textColor="#fff"
45             android:textSize="16sp" />
46  
47         <Button
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"
55             android:text="否"
56             android:textColor="#333"
57             android:textSize="16sp" />
58     </LinearLayout>
59  
60 </LinearLayout>

2.实例化

1 Dialog weixinDialog = new MyWeixinDialog(this);

3.显示

1 weixinDialog.show();

五、对话框与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.

1 showDialog(1);
1 @Override
2   protected Dialog onCreateDialog(int id) {
3       switch(id){
4       case 1:
5         return new DatePickerDialog();
6       }
7   }

六、对话框最优实现方式采用DialogFragment实现如下:

01 /**
02  * 调用方法:
03  * MyAlertDialogFragment dialogFragment = new MyAlertDialogFragment();
04  * dialogFragment.show(getFragmentManager(), "dialog");
05  *
06  */
07 public class MyAlertDialogFragment extends DialogFragment {
08     @Override
09     public void onCreate(Bundle savedInstanceState) {
10         super.onCreate(savedInstanceState);
11     }
12     //法二
13      @Override
14      public View onCreateView(LayoutInflater inflater, ViewGroup container,
15             Bundle savedInstanceState) {
16  
17         View v = inflater.inflate(R.layout.article_view, container,false);
18         View tv = v.findViewById(R.id.article);
19         ((TextView)tv).setText(mTitle);
20         return v;
21     }
22  
23     // 法一
24     @Override
25     public Dialog onCreateDialog(Bundle savedInstanceState) {
26  
27         return new AlertDialog.Builder(getActivity())
28                 .setIcon(android.R.drawable.ic_dialog_alert)
29                 .setTitle("提示框")
30                 .setPositiveButton(android.R.string.ok,
31                         new DialogInterface.OnClickListener() {
32                             public void onClick(DialogInterface dialog,
33                                     int whichButton) {
34                                 Toast.makeText(getActivity(), "确定",
35                                         Toast.LENGTH_SHORT).show();
36                             }
37                         })
38                 .setNegativeButton(android.R.string.cancel,
39                         new DialogInterface.OnClickListener() {
40                             public void onClick(DialogInterface dialog,
41                                     int whichButton) {
42                                 Toast.makeText(getActivity(), "取消",
43                                         Toast.LENGTH_SHORT).show();
44                             }
45                         }).create();
46     }
47 }

调用

1 MyAlertDialogFragment dialogFragment = new MyAlertDialogFragment();
2 dialogFragment.show(getFragmentManager(), "dialog");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值