Android--Dialog对话框
在Android开发当中,在界面上弹出一个Dialog对话框使我们经常需要做的,本篇做一下记录,以备遗忘时查询。
dialog就是一个在屏幕上弹出一个可以让用户做出一个选择,或者输入额外的信息的对话框,一个对话框并不会沾满我们整个的屏幕,并且通常用于模型事件当中需要用户做出一个决定后才会继续执行。
Dialog类是dialog对话框的基类,但是我们应该避免直接使用这个类来实例化一个dialog对话框,我们应当使用其子类来得到一个对话框:
java.lang.Object android.app.Dialog Known Direct Subclasses AlertDialog, CharacterPickerDialog, MediaRouteChooserDialog, MediaRouteControllerDialog, Presentation Known Indirect Subclasses DatePickerDialog, ProgressDialog, TimePickerDialog
我们看到,Dialog有很多的子类实现,所以我们要定义一个对话框,使用其子类来实例化一个即可,而不要直接使用Dialog这个父类来构造。
我们看到,AlertDialog是Dialog的一个直接子类。
使用AlertDialog,我们可以显示一个标题,最多3个按钮操作,以及一组选择框或者是自己定义的弹出框。
在AlertDialog中,定义按钮都是通过 setXXXButton 方法来完成,其中一共有3种不同的Action Buttons供我们选择:
1.setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener) 这是一个相当于OK、确定操作的按钮, 2.setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener) 这是一个相当于取消操作的按钮。 3. setNeutralButton (CharSequence text, DialogInterface.OnClickListener listener) 这个是相当于一个忽略操作的按钮。
我们每一种action buttons最多只能出现一个,即弹出对话框最多只能出现一个PositiveButton。
接下来我们通过一个一个的具体实例来看看我们常用的几种AlertDialog对话框。
1.弹出一个警告框,并有三个按钮可选择
我们来看看代码部分:
button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 通过AlertDialog.Builder这个类来实例化我们的一个AlertDialog的对象 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); // 设置Title的图标 builder.setIcon(R.drawable.ic_launcher); // 设置Title的内容 builder.setTitle("弹出警告框"); // 设置Content来显示一个信息 builder.setMessage("确定删除吗?"); // 设置一个PositiveButton builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "positive: " + which, Toast.LENGTH_SHORT).show(); } }); // 设置一个NegativeButton builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "negative: " + which, Toast.LENGTH_SHORT).show(); } }); // 设置一个NeutralButton builder.setNeutralButton("忽略", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "neutral: " + which, Toast.LENGTH_SHORT).show(); } }); // 显示出该对话框 builder.show(); } });
我们如果要创建一个AlertDialog对话框,需要使用AlertDialog的一个内部类,即AlertDialog.Builder来构建一个AlertDialog的对话框,然后通过setXX方法来设置我们想要显示的内容即可。
我们看到,我们一共设置了3个action buttons,每一个button都为其绑定了一个 DialogInterface.OnClickListener() 的监听事件,然后在里面通过Toast吐司对话框(这个在后面随笔中会讲解)来弹出一下我们的一些信息,which方法表示的是action button所代表的int值:
positive: -1 negative: -2 neutral: -3
我们可以知道,which=-1就表示点击的是确定按钮,-2表示点击的是取消按钮,-3表示点击的是忽略按钮。
import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class SingleChoiceItemsTest extends Activity implements OnClickListener { private String[] province = new String[] { "上海", "北京", "湖南", "湖北", "海南" }; private Button btnSingleChoiceList; // 单击事件对象的实例 private ButtonOnClick buttonOnClick = new ButtonOnClick(1); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnSingleChoiceList = (Button) findViewById(R.id.btnSingleChoice); btnSingleChoiceList.setOnClickListener(this); } @Override public void onClick(View v) { showSingleChoiceButton(); } // 在单选选项中显示 确定和取消按钮 //buttonOnClickg变量的数据类型是ButtonOnClick,一个单击事件类 private void showSingleChoiceButton() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("请选择省份"); builder.setSingleChoiceItems(province, 0, buttonOnClick); builder.setPositiveButton("确定", buttonOnClick); builder.setNegativeButton("取消", buttonOnClick); builder.show(); } private class ButtonOnClick implements DialogInterface.OnClickListener { private int index; // 表示选项的索引 public ButtonOnClick(int index) { this.index = index; } @Override public void onClick(DialogInterface dialog, int which) { // which表示单击的按钮索引,所有的选项索引都是大于0,按钮索引都是小于0的。 if (which >= 0) { //如果单击的是列表项,将当前列表项的索引保存在index中。 //如果想单击列表项后关闭对话框,可在此处调用dialog.cancel() //或是用dialog.dismiss()方法。 index = which; } else { //用户单击的是【确定】按钮 if (which == DialogInterface.BUTTON_POSITIVE) { //显示用户选择的是第几个列表项。 final AlertDialog ad = new AlertDialog.Builder( SingleChoiceItemsTest.this).setMessage( "你选择的地区是:" + index + ":" + province[index]).show(); //五秒钟后自动关闭。 Handler hander = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { ad.dismiss(); } }; hander.postDelayed(runnable, 5 * 1000); } //用户单击的是【取消】按钮 else if (which == DialogInterface.BUTTON_NEGATIVE) { Toast.makeText(SingleChoiceItemsTest.this, "你没有选择任何东西", Toast.LENGTH_LONG); } } }