对话框

本文详细介绍如何在Android应用中实现各种类型的对话框,包括取消、确定对话框,列表选项对话框,单选、多选列表对话框,进度对话框,自定义对话框,日期选择对话框和时间选择对话框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()等方法也适用于他们。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值