对话框

来源:互联网 发布:哈密顿方程 知乎 编辑:程序博客网 时间:2024/05/18 15:04

1. 实现取消、确定对话框

AlertDialog.Builder是AlertDialog的内部类,使用AlertDialog.Builder的create()方法可以可以创建带有参数的对话框。用户可以在使用这种对话框的同时去做其他事情,用dismiss()方法使对话框消失。

AlertDialog.Builder alertDialogBuilder = newAlertDialog.Builder(MainActivity.this);alertDialogBuilder.setTitle("这是标题!");alertDialogBuilder.setMessage("这是提示信息!");alertDialogBuilder.setIcon(R.drawable.ic_launcher);alertDialogBuilder.setPositiveButton("确定", new OnClickListener() {       @Override    publicvoid onClick(DialogInterface dialog, int which) {       //点击确定的处理事件          dialog.dismiss();       }});alertDialogBuilder.setNeutralButton("忽略", new OnClickListener() {       @Override    publicvoid onClick(DialogInterface dialog, int which) {       //点击忽略的处理事件       dialog.dismiss();    }});alertDialogBuilder.setNegativeButton("取消", new OnClickListener() {       @Override    publicvoid onClick(DialogInterface dialog, int which) {       // 点击取消的处理事件       dialog.dismiss();    }});AlertDialog alertDialog =alertDialogBuilder.create();alertDialog.show();

效果图如下:


注意:对NegativeButton及PositiveButton绑定的OnClickListener使用的是android.content.DialogInterface.OnClickListener。Android为防止用户误操作,将NegativeButton放在左边。

2. 实现列表选项对话框

使用AlertDialog不仅可以实现包含多个按钮的取消、确定的对话框,还可以实现列表形式选项的弹出对话框。

要实现列表形式的对话框,使用AlertDialog.Builder的setItems(CharSequence[] items, DialogInterface.OnClickListenerlistener)方法传入包含要显示的列表内容的CharSequence[]数组即可,此时不能使用setMessage(CharSequencemessage)方法!否则message将会覆盖items,导致items不显示。在item的OnClickListener中可以定义对用户选择的处理事件。

//定义列表项目CharSequence[] items = {"item1","item2", "item3"};AlertDialog.Builder alertDialogBuilder = newAlertDialog.Builder(MainActivity.this);alertDialogBuilder.setTitle("这是标题");alertDialogBuilder.setItems(items, newOnClickListener() {       @Override    publicvoid onClick(DialogInterface dialog, int which) {       switch(which) {       case 0:           tvListAlertDialog.setText("你选了item1");           break;       case 1:           tvListAlertDialog.setText("你选择了item2");           break;       case 2:           tvListAlertDialog.setText("你选择了item3");           break;       default:           break;       }    }});AlertDialog alertDialog =alertDialogBuilder.create();alertDialog.show();

效果图如下:


除可用CharSequence[]items = {"item1", "item2", "item3"}来新建一个CharSequence数组作为setItems(CharSequence[]items, DialogInterface.OnClickListener listener)的参数外,还可以在string.xml文件中定义string-array资源

<string-array name="items">   <item>item1</item>   <item>item2</item>   <item>item3</item>   <item>item4</item></string-array>

然后再在使用setItems()时调用

alertDialogBuilder.setItems(R.array.items, new OnClickListener());

3. 实现单选、多选列表对话框

用AlertDialog实现单选、多选列表对话框和前两种方法差不多,只不过在set*Items()上有区别。

实现单选列表使用的是setSingleChoiceItems(CharSequence[]items, int checkedItem, DialogInterface.OnClickListener listener)方法,其中items是要传入的列表内容;checkedItem是默认选中的选项,传入-1表示默认不选中任何选项;listener是对选项点击事件的监听器。

AlertDialog.Builder alertDialogBuilder = newAlertDialog.Builder(MainActivity.this);alertDialogBuilder.setTitle("这是标题!");alertDialogBuilder.setSingleChoiceItems(items, -1,new OnClickListener() {       @Override    publicvoid onClick(DialogInterface dialog, int which) {       dialog.dismiss();    }});AlertDialog alertDialog =alertDialogBuilder.create();alertDialog.show();

实现的效果图如下:


实现单选列表使用的是setMultiChoiceItems(CharSequence[]items, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListenerlistener)方法,其中items是要传入的列表内容;checkedItems是默认选中的选项,传入null表示默认不选中任何选项,否则传入布尔型的序列(如:{true,false,ture…});listener是对选项点击事件的监听器。

AlertDialog.Builder alertDialogBuilder = newAlertDialog.Builder(MainActivity.this);alertDialogBuilder.setTitle("这是标题!");alertDialogBuilder.setMultiChoiceItems(items, null,new OnMultiChoiceClickListener() {       @Override    publicvoid onClick(DialogInterface dialog, int which, boolean isChecked) {          }});alertDialogBuilder.setNegativeButton("取消", new OnClickListener() {       @Override    publicvoid onClick(DialogInterface dialog, int which) {       dialog.dismiss();    }});alertDialogBuilder.setPositiveButton("确定", new OnClickListener() {       @Override    publicvoid onClick(DialogInterface dialog, int which) {       dialog.dismiss();    }});AlertDialog alertDialog =alertDialogBuilder.create();alertDialog.show();

效果图如下:


4. 实现进度对话框

ProgressDialog继承了AlertDialog,最简单的进度对话框直接调用show(Contextcontext, CharSequence title, CharSequence message)即可。

ProgressDialog.show(MainActivity.this, "这是标题!", "这是提示信息!");

实现的效果如下:


虽然这样可以实现进度对话框的效果,但是不知道如何使这个进度对话框消失。所以最好还是将ProgressDialog实例化比较好,然后就可以调用dismiss()方法使他消失。

ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);progressDialog.setTitle("这是标题!");progressDialog.setMessage("这是提示信息!");progressDialog.show();//progressDialog.dismiss();

此外还可以使用setProgressStyle(intstyle)来设置对话框为水平进度条对话框,使用setProgress(int value)来改变进度。使用setCancelable(false)使当前操作不可取消。

ProgressDialog progressDialog = newProgressDialog(MainActivity.this);progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置为不可取消progressDialog.setCancelable(false);progressDialog.setTitle("这是标题");progressDialog.setMessage("这是提示信息");progressDialog.setMax(1000);progressDialog.show();progressDialog.setProgress(50);

实现的效果如下:


5. 自定义对话框

使用Dialog.setContentView(view)可以设置弹出对话框的布局,我们自定义了下面的布局

<?xml version="1.0"encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:id="@+id/customdialog"   android:layout_width="match_parent"android:layout_height="wrap_content"android:clickable="true"   android:gravity="center_horizontal"   android:orientation="vertical" >    <EditText       android:id="@+id/customdialog_name"       android:layout_width="fill_parent"       android:layout_height="wrap_content"       android:hint="@string/customdialog_name"/>      <EditText       android:id="@+id/customdialog_pwd"       android:layout_width="fill_parent"       android:layout_height="wrap_content"       android:hint="@string/customdialog_pwd"       android:inputType="textPassword"/>    </LinearLayout>

使用以下方式实现自定义对话框:

LayoutInflater inflater =MainActivity.this.getLayoutInflater();AlertDialog.Builder alertDialogBuilder = newAlertDialog.Builder(       MainActivity.this);alertDialogBuilder.setTitle("这是标题!");alertDialogBuilder.setView(inflater.inflate(       R.layout.customdialog,       (ViewGroup)findViewById(R.id.customdialog_root)));alertDialogBuilder.setNegativeButton("取消",       newOnClickListener() {            @Override           publicvoid onClick(DialogInterface dialog,int which) {           //TODO Auto-generated method stub            }       });alertDialogBuilder.setPositiveButton("确定",new OnClickListener() {            @Override           publicvoid onClick(DialogInterface dialog,int which) {           //TODO Auto-generated method stub            }       });AlertDialog alertDialog =alertDialogBuilder.create();alertDialog.show();

实现的效果图如下:


此时可以在布局文件中使用android:onClick="onBtnClick"来实现对控件事件的监听,当用户点击了该控件,系统会调用Activity中的onBtnClick(Viewv)方法。

public void onBtnClick(View v){}

6. 自定义对话框

可以使用Activity实现自定义对话框的效果,只需要在AndroidManifest.xml中声明android:theme="@android:style/Theme.Holo.Dialog"即可使该Activity以对话框的形式显示。不过只有APILevel 高于11才可以支持这个主题。使用Activity作为对话框可以很容易的控制各组件的事件响应。

在AndroidManifest.xml中声明Activity,使用lable定义标题,

<activity   android:name="com.weizi.android_dialog.CustomDialogActivity"    android:theme="@android:style/Theme.Holo.Dialog"   android:label="@string/title_activity_custom_dialog" ></activity>

使用上面的布局添加两个按钮得到的对话框效果如下:


7. 实现日期选择对话框

使用DatePickerDialog可以轻易实现时间选择效果的对话框,DatePickerDialog继承了android.app.AlertDialog。

Calendar calendar = Calendar.getInstance();DatePickerDialog datePickerDialog = newDatePickerDialog(MainActivity.this,       newDatePickerDialog.OnDateSetListener() {       @Override    publicvoid onDateSet(DatePicker view, int year, int monthOfYear,           intdayOfMonth) {       // TODOAuto-generated method stub          }}, calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));datePickerDialog.setTitle("这是标题");datePickerDialog.show();

效果如下:


8. 实现时间选择对话框

使用TimePickerDialog实现时间选择对话框和使用DatePickerDialog实现日期选择对话框一样简单,只需要把代码部分的DatePickerDialog换成TimePickerDialog就可以了。

Calendar calendar = Calendar.getInstance();TimePickerDialog timePickerDialog = newTimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {    @Override    publicvoid onTimeSet(TimePicker view, int hourOfDay, int minute) {       // TODOAuto-generated method stub          }}, calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE), true);timePickerDialog.show();

由于两者都继承了AlertDialog,setTitle()、setPositiveButton()等方法也适用于他们。

0 0