这一讲我们开始讲Android UI界面的对话框 Dialogs。对话框是一个小的窗口,它会提示用户对一些额外的信息做一个决定。通常一个对话框不会填充整个窗口。此时对话框获取到焦点,Activity失去了焦点。Dialog 类是所有对话框的基类,通常我们也不会对这个类进行直接操作,而是使用它的子类进行操作。它的子类有:
1). AlertDialog2). ProgressDialog3). DatePickerDialog4). TimePickerDialog
1. 首先我们来看一下 AlertDialog (警告框),它是继承了Dialog的子类,它是用户用的比较的多交互控件,一般对话框中包含了标题,信息,和最多三个的按钮。它会包含以下四个参数:
1). A title
2). A text message
3). One, two, or three buttons
4). A list of selectable items (with optional checkboxes or radio buttons) [包含一些列表的选项,比如说是可选的checkboxes 和 radio buttons ]
2. 想要创建对话框,需要使用 AlertDialog.Builder 子类,获得一个AlertDialog.Builder(Context)的Builder 对象,然后使用这个类的方法定义对话框的属性,当你这些设置好之后,就可以通过 onCreate() 方法创建了。
3. 程序实现如下
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initComponents(); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub /* * 查看API文档:AlertDialog.Builder * 获得这个对象builder之后,就可以调用里面的方法来设置对话框的各种属性了 */ AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("提示"); builder.setMessage("你确定要删除吗?"); builder.setIcon(R.drawable.ic_launcher); /* * 注意是这边的; new DialogInterface.OnClickListener 的 onclick 事件并不是我们普通的单击事件。 */ builder.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub //完全用户的操作:比如删除数据,提交请求等 } }); builder.setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub //取消用户的操作:比如停止下载等。 //dialog.dismiss(); //让对话框消失。 这里可以不用去处理它。 } }); /* * 还有一种按钮,这个一般是比较少用的,读者可以自己去选择 * 一般一个对话框是两个按钮,很少出现三个按钮。 */ builder.setNeutralButton("忽略", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub //忽略用户的操作 } }); //通常显示对话框的写法 AlertDialog alertDialog = builder.create(); alertDialog.show(); // 让对话框显示。 } }); }
4. 执行执行如图所示
也可以在警告框中创建用户可选的列表选项list,就可以使用 setItems()方法。具体方式,查看API文档AlertDialog.Builder方法:public AlertDialog.Builder setItems (CharSequence[] items, DialogInterface.OnClickListener listener)。
程序代码:
private Button button2; //定义3个item列表选项 private final CharSequence[] items = {"北京", "上海", "广州"}; //这边定义为final,因为要在匿名内部类中使用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initComponent(); button2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("提示"); //builder.setMessage("请选择以下城市"); //注意如果对话框已经设置内容了,就不需在设置setMessage()方法,因为设置完之后,它会覆盖list的内容。 builder.setItems(items, new DialogInterface.OnClickListener() { //查看which的值:是从0开始的,就是列表选项的序号. @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub CharSequence select_item = items[which]; Toast.makeText(MainActivity.this, "--->" + select_item, Toast.LENGTH_SHORT).show(); } }); AlertDialog alertDialog = builder.create(); alertDialog.show(); } }); }
执行结果