[android] 02_对话框合集

Android 4.0

对话框合集

一、确定对话框AlertDialog() 1、AlertDialog的创建,Builder创建,类似工厂模式
2、Builder.show()底层
public AlertDialog show() {
    AlertDialog dialog = create();
    dialog.show();
    return dialog;
}
3、核心代码:
public void click1(View view) {
    Builder builder = new Builder(this);//类似工厂,用来创建AlertDialong的
    builder.setTitle("您确定关机么?");
    builder.setMessage("关机后果很严重");
    // 1.确定按钮
    builder.setPositiveButton("确定",new OnClickListener() {
        
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(getApplicationContext(), "5秒钟后关机", 0).show();
        }
    });
    // 2、取消按钮
    builder.setNegativeButton("取消"new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    });
    // 3、使用builder创建create()对话框并show()对话框
    // AlertDialog alertDialog = builder.create();
    // alertDialog.show();
    builder.show();// 上面两句的简写
}  
4、结果
二、单选对话框
1、AlertDialog.Builder builder = new Builder(this),这里的this,不能用getApplicationContext()
核心代码:
public void click2(View view) {
    AlertDialog.Builder builder = new Builder(this);// 这里不能用getApplicationContext(),只能用this
    builder.setTitle("请选择性别");
    // builder.setMessage("不选择性别的默认为人妖。。。");//这句不能加上,否则显示不出来单选对话框
    final String[] items = new String[] { "男""女""人妖" };
    // 1、单选按钮
    builder.setSingleChoiceItems(items, 2, new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(getApplicationContext(), "您选择了:" + items[which],
                    Toast.LENGTH_SHORT).show();
        }
    });
    // 2、确定按钮
    builder.setPositiveButton("确定"new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();// 关闭对话框
        }
    });
    // 2、取消按钮
    builder.setNegativeButton("取消"new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();// 关闭对话框
        }
    });
    builder.show();
}
2、结果:
三、多选对话框 
核心代码:

public void click3(View view) {
    AlertDialog.Builder builder = new Builder(this);// 这里不能用getApplicationContext(),只能用this
    builder.setTitle("您喜欢吃什么?");
    // builder.setMessage("不选择就默认吃粑粑,hiahia!!!");//这句不能加上,否则显示不出来多选对话框
    // 1、多选对话框
    final CharSequence[] items = { "小米""大米""玉米""屎粑粑" };
    boolean[] checkedItems = { falsefalsefalsefalsetrue };
    builder.setMultiChoiceItems(items, checkedItems,new OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which,boolean isChecked) {
                    if (isChecked) {
                        Toast.makeText(getApplicationContext(), "您选择了:" + items[which],Toast.LENGTH_SHORT).show();
                    }
                }
            });
    // 2、确定按钮
    builder.setPositiveButton("确定"new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();// 关闭对话框
        }
    });
    // 3、取消按钮
    builder.setNegativeButton("取消"new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();// 关闭对话框
        }
    });
    builder.show();
}
结果:
四、进度对话框
1、ProgressDialog和ProgressBar是两个特殊的控件,可以在子线程中更新UI
/**
 *TODO 4、没有数据的进度对话框
 * @param view
 */
public void click4(View view){
    
    ProgressDialog pd = new ProgressDialog(this);// 不能用getApplicationContext()
    pd.setTitle("提醒");
    pd.setMessage("正在获取数据");
    pd.show();
}
/**
 *TODO 5、有数据的进度对话框
 * @param view
 */
public void click5(View view) {
    
    final ProgressDialog pd = new ProgressDialog(this);// 不能用getApplicationContext()
    pd.setTitle("提醒");
    pd.setMessage("正在获取数据");
    // pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);//默认的旋转体
    pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 水平方向的
    pd.setMax(100);
    pd.show();
    
    // 在子线程更新ui,ProgressDialog和ProgressBar是两个特殊的控件,可以在子线程中更新UI
    new Thread() {
        @Override
        public void run() {
            super.run();
            for (int i = 0; i < 100; i++) {
                pd.setProgress(i + 1);
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            pd.dismiss();
        }
    }.start();
}
结果: