android dialog 总结

参考文章
http://www.open-open.com/lib/view/open1329891315389.html
http://www.oschina.net/question/54100_32486

1. 基本的dialog写法

AlertDialog.Builder builder = new Builder(MainActivity.context);
      builder.setMessage("确认删除吗?");

      builder.setTitle("提示");

      builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {

       public void onClick(DialogInterface dialog, int which) {
        dialog.dismiss();
       }
      });

      builder.setNegativeButton("取消", null);
      builder.create().show();

效果
这里写图片描述

AlertDialog.Builder属性
  • setTitle: 为对话框设置标题 ;
  • setIcon : 为对话框设置图标;
  • setMessage: 为对话框设置内容;
  • setView : 给对话框设置自定义样式 ;
  • setItems: 设置对话框要显示的一个list,一般用于显示几个命令时;
  • setMultiChoiceItems:用来设置对话框显示一系列的复选框;
  • setNeutralButton : 响应中立行为的点击;
  • setPositiveButton : 响应Yes/Ok的点击 ;
  • setNegativeButton :响应No/Cancel的点击 ;
  • create : 创建对话框 ;
  • show : 显示对话框;

2. 单选、多选和列表对话框

使用setSingleChoiceItems和setMultiChoiceItems以及setItems可以实现单选,多选,列表对话框,但要注意的是,此时不能使用setMessage方法,否则会显示不出来。

代码:
AlertDialog.Builder builder = new Builder(activity);
          builder.setTitle("提示");
          builder.setSingleChoiceItems(new String[]{"item1","item2"}, 0, null);//单选
//        builder.setMultiChoiceItems(new String[]{"item1","item2"}, new boolean[]{true,false}, null);//多选
//        builder.setItems(new String[]{"item1","item2"}, null);//列表
          builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
           }
          });
          builder.setNegativeButton("取消", null);
          builder.create().show();
效果:

单选
单选
多选
多选
列表

3. 自定义样式

通过setView可以为dialog设置自定义的样式,其参数既可以为单个控件,也可以为视图容器,以实现复杂的布局。

代码:
LayoutInflater inflater = activity.getLayoutInflater();
        View layout = inflater.inflate(R.layout.dialog_newtype,
                (ViewGroup)findViewById(R.id.id_newproject_ll));
        EditText newProjectet=(EditText) layout.findViewById(R.id.id_newproject_et);

        new AlertDialog.Builder(this).setTitle("增加类型").setView(layout)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                    }
                })
                .setNegativeButton("取消", null).show();
效果

自定义

4. 进度条dialog

进度条dialog要使用ProgressDialog。

ProgressDialog属性
  • setProgressStyle: 设置进度条风格,风格为圆形,旋转的;
  • setTitlt: 设置ProgressDialog 标题;
  • setMessage: 设置ProgressDialog提示信息;
  • setIcon: 设置ProgressDialog标题图标;
  • setIndeterminate: 设置ProgressDialog 的进度条是否不明确;
  • setCancelable: 设置ProgressDialog 是否可以按返回键取消;
  • setButton: 设置ProgressDialog 的一个Button(需要监听Button事件);
  • show: 显示ProgressDialog。
圆形进度条
代码
ProgressDialog mProgressDialog = new ProgressDialog(activity);
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); //设置进度条风格,风格为圆形,旋转的 
        mProgressDialog.setTitle("读取ing...");// 设置ProgressDialog标题 
        mProgressDialog.setMessage("正在读取中请稍候...");// 设置ProgressDialog提示信息 
        mProgressDialog.setIndeterminate(true);//设置ProgressDialog 的进度条不明确
        mProgressDialog.setCancelable(true);// 设置ProgressDialog 可以按退回键取消
        mProgressDialog.setButton("确定", new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int whichButton)
            {
                // 这里添加点击后的逻辑
            }
        });
        mProgressDialog.show();// 让ProgressDialog显示
效果

圆形进度条

条形进度条
代码
mProgressDialog.setTitle("进度条窗口");// 设置ProgressDialog标题 
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置进度条风格,风格为长形
        mProgressDialog.setMax(100);// 设置ProgressDialo进度条进度 
        mProgressDialog.setButton("确定", new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int whichButton)
            {
                // 这里添加点击后的逻辑
            }
        });
        mProgressDialog.setButton2("取消", new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int whichButton)
            {
                // 这里添加点击后的逻辑
            }
        });
        mProgressDialog.show();
        new Thread()
        {
            @Override
            public void run() 
            {
                int Progress = 0;
                while (Progress < 100)
                {
                    try
                    {                
                        mProgressDialog.setProgress(Progress++);  
                        //mProgressDialog.incrementProgressBy(1);
                        Thread.sleep(100);
                    } catch (Exception e)
                    {
                        // TODO Auto-generated catch block
                        mProgressDialog.cancel();
                        //e.printStackTrace();
                    }
                }    
            };
        }.start();
效果

条形进度条

5. 保持dialog不被关闭

为了保证dialog在点击按钮后不被关闭,可以在点击事件中添加如下代码,注意Field导入java.lang.reflect.Field这个包:

//用于不关闭对话框
try { 
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); 
field.setAccessible(true); 
field.set(dialog, false);


} catch (Exception e) { 
e.printStackTrace(); 
}

添加上述代码后就可以使dialog无法关闭,在你需要关闭的地方,添加:

try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, true);
} catch (Exception e) {
e.printStackTrace();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值