Android开发基础 几种常用对话框的使用

本文详细介绍如何在Android开发中创建和使用五种不同类型的对话框,包括确定取消对话框、列表对话框、单选对话框、多选对话框及自定义对话框。通过具体代码示例,展示如何设置图标、标题、内容及响应事件。

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

Android开发基础 几种常用对话框的使用

开发步骤如下:(1)布局界面(2)获取按钮,添加事件监听器,实现对话框 。
我采用的是RelativeLayout布局和LinearLayout两个布局,自定义对话框用的是用的是在Layout下创建的LinearLayout布局,其余对话框用的是默认的RelativeLayout布局。
第一步,点击File->New ->New Module,创建一个项目模块,在activity_main.xml目录下,设计五个基本按钮,布局代码如上图所示,可以直接在设计界面用鼠标拖动按钮,移动按钮的位置,代码会自动生成,可以在activity_main.xml目录下修改按钮名称,也可以双击按钮修改。这样按钮的布局便做好了,还是很简单的。

下面我们先看布局文件,RelativeLayout布局,源代码如下,

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
 tools:context="com.example.nuist__njupt.dialoddemo.MainActivity">

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="20sp"
        android:text="" />

    <View
        android:id="@+id/line"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true" />

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="确定【取消】对话框"
        android:layout_alignRight="@+id/title"
        android:layout_alignEnd="@+id/title" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="简单列表对话框"
        android:layout_below="@+id/title"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="22dp" />
    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="单选列表对话框"
        android:layout_below="@+id/button2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
    <Button
        android:id="@+id/button4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="多选列表对话框"
        android:layout_below="@+id/button3"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
    <Button
        android:id="@+id/button5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="自定义VIEW对话框"
        android:layout_below="@+id/button4"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />
</RelativeLayout>

下面的是在Layout下创建的LinearLayout布局,在布局文件下布局如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
</LinearLayout>

第二步,在MainActivity文件夹下,获取按钮,添加事件监听器并实现对话框 。(注:我的代码呈上,你可以拿去用,如果出现报错,记得点击Alt+Enter会对你有帮助的)
(1)带取消和确定按钮的对话框,源代码如下,把此方法用在注释中说明,其中我设置了图标,如果你不需要,可以把设置图标那行代码去掉,如果需要,则需复制一张名称为apple的图片粘贴到res文件的drawable目录下。

// author Wangguodong
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
      //显示带取消和确定按钮的对话框
        Button button1 = (Button) findViewById(R.id.button1) ;
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //创建对话框对象,并实例化
                AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
                alertDialog.setIcon(R.drawable.apple); //引用图标
                alertDialog.setTitle("乔布斯:"); //设置标题
                alertDialog.setMessage("活着就是为了改变世界,难道还有什么其它原因吗?");//设置内容信息
                alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "否", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, "您单击了否按钮", Toast.LENGTH_SHORT).show();
                    }
                });  //取消按钮
                alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "是", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, "您单击了是按钮", Toast.LENGTH_SHORT).show();
                    }
                });//确定按钮
                alertDialog.show();
            }
        }) ;

(2)简单列表对话框,源代码如下,已在注释中说明,其中我设置了图标,如果你不需要,可以把设置图标那行代码去掉,如果需要,则需复制一张名称为like的图片粘贴到res文件的drawable目录下。

 // 显示列表对话框
        Button button2 = (Button) findViewById(R.id.button2) ;
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
             //带多个列表项的列表对话框
            final String [] s = new String [] {"求知若饥,虚心若愚","或者就是为了改变世界",
                     "当你有使命,它会让你变得更专注","要么出众,要么出局"} ; //数组中存放四个列表项
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) ; //  创建一个AlertDialog.Builder对象
                builder.setIcon(R.drawable.like) ; //引用图标
                builder.setTitle("请您选择下面四句话中你最喜欢的一句话");
                builder.setItems(s, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, "您选择了【" + s[which] + "】", Toast.LENGTH_SHORT).show();
                    }
                }) ;//确定列表项
                builder.create().show() ; //创建并显示对话框
                }
        }) ;

(3)单选列表对话框,源代码如下,已在注释中说明,其中我设置了图标,如果你不需要,可以把设置图标那行代码去掉,如果需要,则需复制一张名称为select的图片粘贴到res文件的drawable目录下。

 //显示单选对话框
        Button button3 = (Button) findViewById(R.id.button3) ;
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //创建带列表项的对话框
               final String [] s = new String[] {"比尔盖茨","乔布斯","扎克伯格","马云","马化腾"} ;
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) ; //  创建一个AlertDialog.Builder对象
                builder.setIcon(R.drawable.select) ; //引用图标
                builder.setTitle("您最喜欢下面哪位大佬呢") ;//设置标题
                builder.setSingleChoiceItems(s, 0, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, "您选择了【" + s[which] + "】", Toast.LENGTH_SHORT).show();
                    }
                }) ; //添加列表项
                builder.setPositiveButton("确定", null) ; //创建确定按钮,并默认不做处理
                builder.create().show() ;
            }
        }) ;

(4)多选列表对话框,源代码如下,已在注释中说明,其中我设置了图标,如果你不需要,可以把设置图标那行代码去掉,如果需要,则需复制一张名称为eat的图片粘贴到res文件的drawable目录下。

  //显示多选对话框
        Button button4 = (Button) findViewById(R.id.button4) ;
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //创建带多选项的对话框
                final boolean [] checkItems = new boolean[]{false,true,false,true,false} ; //记录列表项的状态
               final  String [] s = new String [] {"王者荣耀","和平精英","英雄联盟","穿越火线","地下城与勇士"} ;//显示列表项的内容
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) ; //  创建一个AlertDialog.Builder对象
                builder.setIcon(R.drawable.eat) ; //引用图标
                builder.setTitle("请您选择你最喜欢的游戏") ;//设置标题
                builder.setMultiChoiceItems(s, checkItems, new DialogInterface.OnMultiChoiceClickListener() {
                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                        checkItems[which] = isChecked; //根据列表选项被操作然后改变状态

                    }
                }) ; //添加的列表项
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        String result = ""; //用于记录最终的结果
                        for (int i = 0; i < checkItems.length; i++) {
                            if (checkItems[i]) {
                                result += s[i];
                            }
                        }
                        if (!"".equals(result)) { //判断如果选择的值不为空则输出
                            Toast.makeText(MainActivity.this, "您选择了【" + result + "】", Toast.LENGTH_SHORT).show();
                        }
                    }
                }) ; //添加确定按钮
                builder.create().show() ;
            }
        }) ;

(5)自定义对话框,源代码如下,已在注释中说明,其中我设置了图标,如果你不需要,可以把设置图标那行代码去掉,如果需要,则需复制一张名称为girl的图片粘贴到res文件的drawable目录下。

 //显示自定义对话框

        Button button5 = (Button) findViewById(R.id.button5);
        button5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) ; //  创建一个AlertDialog.Builder对象
                builder.setIcon(R.drawable.girl) ; //引用图标
                builder.setTitle("自定义的对话框") ;//设置标题
                final View dialogView = LayoutInflater.from(MainActivity.this)
                        .inflate(R.layout.layout,null);
                builder.setView(dialogView) ; //设置视图

                builder.setPositiveButton("确定",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // 获取EditView中的输入内容
                                EditText edit_text =
                                        (EditText) dialogView.findViewById(R.id.edit_text);
                                Toast.makeText(MainActivity.this,
                                        edit_text.getText().toString(),
                                        Toast.LENGTH_SHORT).show();
                            }
                        });
                builder.show();
            }
        }) ;

最后一步,在模拟器上调试,结果如下图所示。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
纯原创,如果对你有帮助,点个赞再走吧,谢啦!

package com.tarena.day09_alertdialog; import java.util.Calendar; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.DatePickerDialog; import android.app.DatePickerDialog.OnDateSetListener; import android.app.ProgressDialog; import android.app.TimePickerDialog; import android.app.TimePickerDialog.OnTimeSetListener; import android.content.DialogInterface; import android.content.DialogInterface.OnMultiChoiceClickListener; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.DatePicker; import android.widget.EditText; import android.widget.TimePicker; import android.widget.Toast; public class MainActivity extends Activity { private AlertDialog dialog1; private AlertDialog dialog2; private AlertDialog dialog3; private AlertDialog dialog4; private AlertDialog dialog5; private ProgressDialog dialog6; private TimePickerDialog dialog7; private DatePickerDialog dialog8; private EditText etUserName, etPassword; private boolean isFlag; private void initTimePickerDialog(){ dialog7 = new TimePickerDialog(this, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Toast.makeText(MainActivity.this, "Time:"+hourOfDay+":"+minute, Toast.LENGTH_LONG).show(); } }, 0, 0, false); } private void initDatePickerDialog(){ dialog8 = new DatePickerDialog(this, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { Toast.makeText(MainActivity.this, "Date:"+year+":"+(monthOfYear+1)+":"+dayOfMonth, Toast.LENGTH_LONG).show(); } }, 2015, Calendar.SEPTEMBER, 17); } private void initAlertDialog1() { Builder builder = new Builder(this); // AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("提示"); // 添加显示信息 builder.setMessage("最简单对话框"); // 图标 builder.setIcon(android.R.drawable.dialog_holo_light_frame); // 创建AlertDialog对象 dialog1 = builder.create(); } private void initAlertDialog2() { Builder builder = new Builder(this); builder.setTitle("提示"); // 添加显示信息 builder.setMessage("最简单对话框"); // 图标 builder.setIcon(android.R.drawable.dialog_holo_light_frame); // 设置确定按钮 builder.setPositiveButton("确定", new android.content.DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "确定按钮", Toast.LENGTH_SHORT).show(); } }); // 设置按钮 builder.setNegativeButton("消", new android.content.DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog2.dismiss(); } }); // 创建AlertDialog对象 dialog2 = builder.create(); } private void initAlertDialog3() { Builder builder = new Builder(this); builder.setTitle("提示"); // 设置控件方法 builder.setView(loadView()); // 图标 builder.setIcon(android.R.drawable.dialog_holo_light_frame); // 设置确定按钮 builder.setPositiveButton("确定", new android.content.DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String username = etUserName.getText().toString(); String password = etPassword.getText().toString(); Toast.makeText( MainActivity.this, "UserName:" + username + ",Password:" + password, Toast.LENGTH_SHORT).show(); } }); // 设置按钮 builder.setNegativeButton("消", new android.content.DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog3.dismiss(); } }); // 创建AlertDialog对象 dialog3 = builder.create(); } private void initAlertDialog4() { Builder builder = new Builder(this); builder.setTitle("提示"); // 图标 builder.setIcon(android.R.drawable.dialog_holo_light_frame); builder.setSingleChoiceItems(new String[] { "item1", "item2", "item3", "item4" }, 0, new android.content.DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: Toast.makeText(MainActivity.this, "item1", Toast.LENGTH_SHORT).show(); break; case 1: Toast.makeText(MainActivity.this, "item2", Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(MainActivity.this, "item3", Toast.LENGTH_SHORT).show(); break; case 3: Toast.makeText(MainActivity.this, "item4", Toast.LENGTH_SHORT).show(); break; default: break; } } }); // 创建AlertDialog对象 dialog4 = builder.create(); } private void initAlertDialog5(){ Builder builder = new Builder(this); builder.setTitle("提示"); // 图标 builder.setIcon(android.R.drawable.dialog_holo_light_frame); builder.setMultiChoiceItems(new String[]{"item1","item2","item3","item4"}, new boolean[]{true,false,true,false}, new OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { Toast.makeText(MainActivity.this, "Which:"+which+",IsChechked:"+isChecked, Toast.LENGTH_SHORT).show(); } }); dialog5 = builder.create(); } /** * 加载布局 * * @return */ private View loadView() { LayoutInflater inflater = LayoutInflater.from(this); // LayoutInflater inflater = (LayoutInflater) // getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.login, null); etUserName = (EditText) view.findViewById(R.id.et_username); etPassword = (EditText) view.findViewById(R.id.et_password); return view; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initAlertDialog1(); initAlertDialog2(); initAlertDialog3(); initAlertDialog4(); initAlertDialog5(); initTimePickerDialog(); initDatePickerDialog(); addListener(); } private void addListener() { this.findViewById(R.id.button1).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dialog1.show(); } }); this.findViewById(R.id.button2).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dialog2.show(); } }); this.findViewById(R.id.button3).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dialog3.show(); } }); this.findViewById(R.id.button4).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dialog4.show(); } }); this.findViewById(R.id.button5).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dialog5.show(); } }); this.findViewById(R.id.button6).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { isFlag = true; dialog6 = new ProgressDialog(MainActivity.this); dialog6.setTitle("提示"); dialog6.setIcon(R.drawable.ic_launcher); dialog6.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); dialog6.setProgress(100); dialog6.setCancelable(false); dialog6.setButton("完成", new android.content.DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { isFlag = false; dialog6.dismiss(); } }); dialog6.show(); new Thread(){ public void run() { int number = 0; while (isFlag) { dialog6.setProgress(number); number++; if(number > 100){ isFlag = false; dialog6.cancel(); } try { Thread.sleep(80); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; }.start(); } }); this.findViewById(R.id.button7).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dialog7.show(); } }); this.findViewById(R.id.button8).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dialog8.show(); } }); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nuist__NJUPT

给个鼓励吧,谢谢你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值