AlertDialog是Android中的一个标准的对话框,呈献给用户的是一个对话框样式的界面。在我们Android开发过程中会经常被使用,接下来我会逐渐向大家介绍AlertDialog的一些比较另类的使用方式。

1、在AlertDialog中,把字符串数组作为数据源以列表的方式显示。

一般我们显示一个列表,通常会用ListView,只显示字符串的话用ArrayAdapter就够了,所以要显示在aleAlertDialog中的话就写个包含listview的view,然后用AlertDialog的setview方法设置。。。具体我就不详述了,相信大家都会。但是这种方式感觉比较麻烦,又要自己写布局,又要找id,想想都烦,幸运的是,aleAlertDialog给我们提供了一种很方便的方式,AlertDialog.Buidler.setItems方法可以将一个String数组以列表的方式显示在对话框中:

String[] foods = { "饺子", "米饭", "面条" };alertDialog = new AlertDialog.Builder(this).setTitle("标题").setPositiveButton("确定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).setNegativeButton("取消", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).setItems(foods, new OnClickListener() {          @Override     public void onClick(DialogInterface dialog, int which) {      Toast.makeText(getApplicationContext(), foods[which], 0).show();     }    }).create();Window window = alertDialog.getWindow();window.setGravity(Gravity.TOP | Gravity.LEFT);alertDialog.show();


这里有一点需要注意,setMessage和setItems不能同时使用,否则效果出不来。

2、上面已经显示了列表,那么还能不能显示更复杂一点的布局呢?答案是肯定的,我们还可以在AlertDialog上显示单选列表(带选项按钮的列表),也可以显示多选列表(带复选框的列表):

setSingleChoiceItems(foods, 0, new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(getApplicationContext(), foods[which], 0).show();}})
第一个参数是数据源,第二个是默认选中的项,小于0或者大于数据源的长度都默认不选中。第二个是点击监听,可以为null

setMultiChoiceItems(foods, new boolean[]{false,true,false}, new OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {Toast.makeText(getApplicationContext(), foods[which], 0).show();}})
第二个参数和上一个有些不同,它是一个是否选中的数组,true代表选中,false代表不选中。

怎么样?是不是感觉很方便有没有!如果这样你就感觉很方便的话那你也太容易满足了,AlertDialog还有一个setAdapter(adapter, listener)方法,感兴趣的可以自己去试下。

3、我们都知道AlertDialog弹出的对话框无论单击任何按钮都会关闭对话框,那么怎么样才能在点击了按钮以后对话框不被关闭呢?如果想实现这个就需要到Dialog类里面去找了,

private boolean mShowing = false;
/**     * @return Whether the dialog is currently showing.     */    public boolean isShowing() {        return mShowing;    }
 void dismissDialog() {        if (mDecor == null || !mShowing) {            return;        }
我们注意到在dismissDialog方法中,如果mShowing这个属性为false的话方法就会返回,也就是说,dialog不会被dismiss掉。所以我们想实现上面所说道的功能的话,在点击按钮的事件中把mShowing这个属性设为false就可以了,至于如何去设值,那就不能指望android的api了,只有通过反射去改变了,
try {Field field = alertDialog.getClass().getSuperclass().getDeclaredField("mShowing");field.setAccessible(true);field.set(alertDialog, isDismiss);} catch (NoSuchFieldException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();}
这样就可以在用户点击了按钮以后,由我们来控制在何时关闭dialog了。代码很简单,就不多说了,所有代码都在demo里。


点击下载demo

更多相关文章

  1. 在android中使用SQLite数据库
  2. Android中的 单选按钮和复选框
  3. 常用的android intent和intent action
  4. Android(安卓)SQLite事务处理结合Listview列表显示功能示例
  5. Android触摸事件传递(上)
  6. Android自定义漂亮的Dialog
  7. android6.0M系统在代码中实现请求以及检查权限。
  8. Android程序授权。强悍还是恐怖?
  9. Android(安卓)button自定义显示

随机推荐

  1. Android系统中设置TextView的行间距(非行
  2. Android(安卓)所有版本区别总结
  3. android知识链接汇总(3)
  4. Android系统编译环境变量的设置
  5. Android(安卓)NDK开发实例教程
  6. 菜鸟学Android开发系列之:初探Button和Tex
  7. android键盘弹出之后界面整体上移,顶出去
  8. Android通用框架设计与完整电商App开发
  9. Android(安卓)系统中WatchDog 日志分析
  10. android 应用程序数据共享shareuserid篇+