Android——自定义AlertDialog并与Activity进行数据通信

原文地址:http://blog.csdn.net/xuejingfu1/article/details/51597859

以下是官方文档的继承关系:


AlertDialog叫做“警告”对话框,常用于提示用户的某个操作会带来的后果,或者提示用户进行正确的操作。

正常情况下,大家经常看到的是这种情形:


其实现很简单,因为并没有改写任何东西,完全是系统提供的。示例代码如下:

[java]  view plain  copy
 print ?
  1. AlertDialog.Builder dialog = new AlertDialog.Builder (MainActivity.this);  
  2.         dialog.setTitle("退出");  
  3.         dialog.setIcon(R.drawable.exit_icon);  
  4.         dialog.setMessage("是否退出当前应用?");  
  5.         dialog.setCancelable(false);  
  6.         dialog.setPositiveButton("Exit"new DialogInterface.OnClickListener() {  
  7.             @Override  
  8.             public void onClick(DialogInterface dialog, int which) {  
  9.                 Intent intent = new Intent(Intent.ACTION_MAIN);  
  10.                 intent.addCategory(Intent.CATEGORY_HOME);  
  11.                 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  12.                 startActivity(intent);  
  13.                 android.os.Process.killProcess(android.os.Process.myPid());  
  14.             }  
  15.   
  16.         });  
  17.         dialog.setNegativeButton("Cancel"null);  
  18.         dialog.show();  

其中,setTitle设置对话框的标题,setIcon设置图标,setMessage设置对话框中的信息文本,setCancelable(false)指的是该对话框不会在点击“对话框以为区域”、“back键”后消失,而必须通过点击该对话框底部的按钮来收起对话框

系统默认支持在对话框底部添加3个按钮,其中常见的PositiveButton(位于最左侧)和NegativeButton(位于右侧),分别通过setPositiveButton和setNegativeButton来设置,它们的第一个参数是按钮上显示的文字,第二个参数通过实现DialogInterface.OnClickListener()方法来给该按钮添加点击事件。最后,对话框的Builder对象一定要调用show()方法,否则对话框无法显示。有时候我们希望从一个对话框来得到用户的输入,并进行相关的操作。比如,如下效果:


这时候就需要用到AlertDialog.Builder对象的一个很重要的方法setView(View v);其中参数v就是需要我们传入自定义的View对象。

一种简单便捷的方法是通过布局文件来自定义,然后用布局填充器把该布局加载进来并赋给一个View对象。

首先,在res/layout下创建alertdialog_layout.xml文件,添加自己想要在对话框中显示的控件:

[html]  view plain  copy
 print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="wrap_content" >  
  5.     <EditText  
  6.         android:id="@+id/alertDialog_et"  
  7.         android:background="@drawable/bg_edittext"  
  8.         android:paddingLeft="20dp"  
  9.         android:paddingRight="20dp"  
  10.         android:layout_marginTop="30dp"  
  11.         android:layout_marginLeft="25dp"  
  12.         android:layout_marginRight="30dp"  
  13.         android:layout_marginBottom="30dp"  
  14.         android:textColor="#008A00"  
  15.         android:maxLength="3"  
  16.         android:inputType="number"  
  17.         android:layout_width="match_parent"  
  18.         android:layout_height="wrap_content"  
  19.         android:hint="请输入一个有效整数..."/>  
  20.   
  21. </RelativeLayout>  


如果你对以上EditText的属性含义不是很清晰,请点击:

http://blog.csdn.NET/xuejingfu1/article/details/51597032


这里仅仅添加了一个EditText,用于获取用户的输入,对话框底部的按钮当然也可以在该布局里添加。不过对于目前这个需求完全没有必要。

接下来就是引用这个自定义View,代码片段如下:

[java]  view plain  copy
 print ?
  1. final RelativeLayout customView=(RelativeLayout)getLayoutInflater()  
  2.                 .inflate(R.layout.alertdialog_layout,null);  
  3.   
  4.         new AlertDialog.Builder(this)  
  5.                 .setIcon(R.drawable.set_icon)  
  6.                 .setTitle("设置")  
  7.                 .setView(customView)  
  8.                 .setPositiveButton("OK"new DialogInterface.OnClickListener() {  
  9.                     @Override  
  10.                     public void onClick(DialogInterface dialog, int which) {  
  11.                         EditText alarm_value = (EditText)customView.findViewById(R.id.alertDialog_et);  
  12.   
  13.                         //这里进行输入判断  
  14.                         String str=alarm_value.getText().toString();  
  15.   
  16.                         //这里添加对获取到的文本内容处理逻辑...  
  17.             //你可以把此变量赋给一个静态变量,来实现与Activity的通信  
  18.         })  
  19.                 .setNegativeButton("Cancel"null)  
  20.                 .setCancelable(false)  
  21.                 .create()  
  22.                 .show();  

注意:这里通过id来查找控件时,是在customView里面找。以上红色标记处!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值