Android 中对话框的使用

  • 对话框的使用
  • 对话框的分类
  • 使用AlertDialog建立对话框
  • AlertDialog的样式多变,就是因为设置对话框内容时的样式 多变,AlertDialog提供了6种方法设置对话框的内容,如表所示。
  • 实例
  • XML文件


对话框的使用

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

对话框的分类

在日常的App使用中经常看到对话框,可以说对话框的出现使得App不再那么单调。Android中提供了丰富的对话框支持,日常开发中会经常使用到如下表所示对的4种对话框:

对话框

说明

AlertDialog

功能最丰富,实际应用最该的对话框

ProgressDialog

进度对话框,只是用来选择日期

DataPickerDialog

日期选择对话框,只是用来选择日期

TimePickerDialog

时间选择对话框,只是用来选择时间

使用AlertDialog建立对话框

AlertDialog是上述4种对话框中功能最强大、用法最灵活的一种,同时它也是其他3种对话框的父类。
使用AlertDialog生成的对话框样式多变,但是基本样式总会包含4个区域:图标区、标题区、内容区、按钮区
创建一个AlertDialog一般需要如下几个步骤:

  1. 创建AlertDialog.builder对象。
  2. 调用AlertDialog.Builder的setTitle()或setCustomTitle()方法设置标题。
  3. 调用AlertDialog.Builder的setIcon()设置图标。
  4. 调用AlertDialog.Builder的相关设置方法设置对话框内容。
  5. 调用AlertDialog.Builder的setPositiveButton()、setNegativeButton()或setNeutralButton()方法添加多个按钮。
  6. 调用AlertDialog.Builder的create()方法创建AlertDialog对象,再调用AlertDialog对象的show()方法将该对话框显示出来。

AlertDialog的样式多变,就是因为设置对话框内容时的样式 多变,AlertDialog提供了6种方法设置对话框的内容,如表所示。

方法

说明

setMessage()

设置对话内容为简单文本

setItems()

设置对话内容为简单列表项

setSingleChoiceItems()

设置对话框内容为单选列表项

setMultichoiceItems()

设置对话框内容为多选列表项

setAdapter()

设置对话框内容为自定义列表项

setView()

设置对话框内容为自定义View

实例

XML文件

Button的使用详见************
layout_button.xml

<?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">

    <Button
        android:id="@+id/Concel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        <!--   按钮点击事件调用方法   -->
        android:onClick="simpleAlertDialog"
        android:text="@string/concel"
        android:textSize="20sp" />

    <Button
        android:id="@+id/symbollist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/symbollist"
        android:onClick="simpleListAlertDialog"
        android:layout_marginBottom="8dp"
        android:textSize="20sp"/>
    <Button
        android:id="@+id/singlelist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/singlelist"
        android:onClick="singleChioceDialog"
        android:layout_marginBottom="8dp"
        android:textSize="20sp"/>
    <Button
        android:id="@+id/multiplelist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/multiplelist"
        android:onClick="multipleChoiceDialog"
        android:layout_marginBottom="8dp"
        android:textSize="20sp"/>
    <Button
        android:id="@+id/diylist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/diylist"
        android:onClick="diyDialog"
        android:layout_marginBottom="8dp"
        android:textSize="20sp"/>
</LinearLayout>

register_form.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TableRow>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="手机号:"
            android:textColor="#09f"
            android:textSize="17sp"
            android:paddingLeft="16dp"/>
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="请填写手机号码"
            android:paddingLeft="8dp"
            android:selectAllOnFocus="true"/>
    </TableRow>
    <TableRow>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密   码:"
            android:textColor="#09f"
            android:textSize="17sp"
            android:paddingLeft="16dp"/>
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="请填写密码"
            android:paddingLeft="8dp"
            android:selectAllOnFocus="true"/>
    </TableRow>
    <TableRow>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="确认密码:"
            android:paddingLeft="16dp"
            android:textColor="#004"
            android:textSize="16sp"/>
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="请确认密码"
            android:paddingLeft="8dp"
            android:selectAllOnFocus="true"/>
    </TableRow>

</TableLayout>

string.xml

<resources>
    <string name="app_name">March 18</string>
    <string name="concel">点击了[取消]按钮</string>
    <string name="symbollist">简单列表对话框</string>
    <string name="singlelist">单选列表对话框</string>
    <string name="multiplelist">多选列表对话框</string>
    <string name="diylist">自定义VIEW对话框</string>
</resources>

MainActivity

package com.example.march18;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;

public class MainActivity extends AppCompatActivity {

	//定义几个按钮用于点击事件表现不同的对话框
    private Button alert1;              
    private Button alert2;              
    private Button alert3;
    //定义字符串数组用于给多选对话框提供选项
    private String[] items = new String[]{"火锅","可乐","奶茶","炸鸡","红烧肉"};
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_button);
        //为Java中按钮对象绑定对应的XML中的button
        alert1=findViewById(R.id.Concel);
        alert2=findViewById(R.id.symbollist);
        alert3=findViewById(R.id.singlelist);
    }
    //点击按钮显示简单对话框
    public void simpleAlertDialog(View view){
        AlertDialog.Builder builder = new AlertDialog.Builder(this)
                .setTitle("简单对话框")//对话框标题
                .setIcon(R.drawable.icon_dialog)//对话框图标
                .setMessage("Hello\n你好");//对话框中显示的内容
                setPositiveButtton(builder);
                setNegativeButtton(builder).create().show();
    }

    //点击按钮显示简单列表对话框
    public void simpleListAlertDialog(View view){
        AlertDialog.Builder builder = new AlertDialog.Builder(this)
                .setTitle("简单列表对话框")
                .setIcon(R.drawable.icon_dialog)
                .setItems(items, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        alert2.setText("您选中了:"+items[which]);
                    }
                });
                    setPositiveButtton(builder);
                    setNegativeButtton(builder).create().show();
    }

    //点击按钮显示单选列表对话框
    public void singleChioceDialog(View view){
        AlertDialog.Builder builder = new AlertDialog.Builder(this)
                .setTitle("单选列表对话框")
                .setIcon(R.drawable.icon_dialog)
                //设置单选列表项,默认选中第一项(索引为0)
                .setSingleChoiceItems(items, 0,
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                alert3.setText("您选中了"+items[which]);
                            }
                        });
        setPositiveButtton(builder);
        setNegativeButtton(builder).create().show();
    }
    //点击按钮显示多选列表对话框
    public void multipleChoiceDialog(View view){
        AlertDialog.Builder builder = new AlertDialog.Builder(this)
                .setTitle("多选列表对话框")
                .setIcon(R.drawable.icon_dialog)
                .setMultiChoiceItems(items,new boolean[]{true,false,false,false,false},null);
                setPositiveButtton(builder);
                setNegativeButtton(builder).create().show();
    }
    //点击按钮显示自定义View对话框
    public void diyDialog(View view){
        TableLayout registerForm = (TableLayout)getLayoutInflater()
                .inflate(R.layout.register_form,null);
        new AlertDialog.Builder(this).setTitle("自定义对话框")
                .setIcon(R.drawable.icon_dialog)
                .setView(registerForm)
                .setPositiveButton("注册", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //开始注册的逻辑编写
                    }
                }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //取消注册
            }
        }).create().show();
    }
    private AlertDialog.Builder setPositiveButtton(
            AlertDialog.Builder builder){
        return builder.setPositiveButton("确认",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        alert1.setText("点击了【确认】按钮");
                    }
                });
    }
    private AlertDialog.Builder setNegativeButtton(
            AlertDialog.Builder builder){
                return builder.setNegativeButton("取消",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                    alert1.setText("点击了【取消】按钮");
                            }
                        });
    }
}