安卓基础之《(10)—中级控件(4)对话框》

一、提醒对话框AlertDialog

1、AlertDialog可以完成常见的交互操作,例如提示、确认、选择等功能。AlertDialog借助建造器AlertDialog.Builder才能完成参数设置

AlertDialog.Builder的常用方法说明:

(1)setIcon:设置对话框的标题图标

(2)setTitle:设置对话框的标题文本

(3)setMessage:设置对话框的内容文本

(4)setPositiveButton:设置肯定按钮的信息,包括按钮文本和点击监听器

(5)setNegativeButton:设置否定按钮的信息,包括按钮文本和点击监听器

(6)setNeutralButton:设置中性按钮的信息,包括按钮文本和点击监听器,该方法比较少用

2、调用建造器的create方法生成对话框实例,再调用对话框实例的show方法,在页面上弹出提醒对话框

3、提醒对话框效果图

4、例子

activity_alert_dialog.xml

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".AlertDialogActivity">

    <Button
        android:id="@+id/btn_alert"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="弹出提醒对话框"/>

    <TextView
        android:id="@+id/tv_alert"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"/>

</LinearLayout>

AlertDialogActivity.java

java 复制代码
package com.example.chapter05;

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.TextView;

public class AlertDialogActivity extends AppCompatActivity {

    private TextView tv_alert;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alert_dialog);

        Button btn_alert = findViewById(R.id.btn_alert);
        tv_alert = findViewById(R.id.tv_alert);

        btn_alert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 创建提醒对话框的建造器
                AlertDialog.Builder builder = new AlertDialog.Builder(AlertDialogActivity.this);
                // 设置对话框的标题文本
                builder.setTitle("尊敬的用户");
                // 设置对话框的内容文本
                builder.setMessage("你真的要卸载我吗?");
                // 设置对话框的肯定按钮文本及其点击监听器
                builder.setPositiveButton("残忍卸载", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        tv_alert.setText("虽然依依不舍,但是只能离开了");
                    }
                });
                // 设置对话框的否定按钮文本及其点击监听器
                builder.setNegativeButton("我再想想", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        tv_alert.setText("让我再陪你三百六十五个日夜");
                    }
                });

                // 根据建造器创建提醒对话框对象
                AlertDialog dialog = builder.create();
                // 显示提醒对话框
                dialog.show();
            }
        });

    }
}

二、日期对话框DatePickerDialog

1、日期选择器DatePicker可以让用户选择具体的年月日

2、但DatePicker并非弹窗模式,而是在当前页面占据一块区域,并且不会自动关闭

3、DatePickerDialog相当于在AlertDialog上装载DatePicker,日期选择事件则由监听器OnDateSetListener负责响应,在该监听器的onDateSet方法中,开发者获取用户选择的具体日期,再做后续处理

4、例子

activity_date_picker.xml

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="5dp"
    tools:context=".DatePickerActivity">

    <DatePicker
        android:id="@+id/dp_date"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:datePickerMode="spinner"
        android:calendarViewShown="false"/>

    <Button
        android:id="@+id/btn_ok"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="确 定"/>

    <TextView
        android:id="@+id/tv_date"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/btn_date"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="弹出对话框选择日期"/>

    <TextView
        android:id="@+id/tv_date2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

DatePickerActivity.java

java 复制代码
package com.example.chapter05;

import androidx.appcompat.app.AppCompatActivity;

import android.app.DatePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;

import java.time.LocalDate;
import java.util.Calendar;

public class DatePickerActivity extends AppCompatActivity {

    private TextView tv_date;
    private DatePicker dp_date;
    private TextView tv_date2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_date_picker);

        Button btn_ok = findViewById(R.id.btn_ok);
        Button btn_date = findViewById(R.id.btn_date);

        dp_date = findViewById(R.id.dp_date);
        tv_date = findViewById(R.id.tv_date);
        tv_date2 = findViewById(R.id.tv_date2);

        btn_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 在点击事件里获取DatePicker的数据,并且显示在TextView中
                String desc = String.format("您选择的日期是%d年%d月%d日",
                        dp_date.getYear(), dp_date.getMonth() + 1, dp_date.getDayOfMonth());
                tv_date.setText(desc);
            }
        });

        btn_date.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 获取日历的一个实例,里面包含了当前的年月日
                Calendar calendar = Calendar.getInstance();
                int curYear = calendar.get(Calendar.YEAR);
                int curMonth = calendar.get(Calendar.MONTH);
                int curDayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);

                // 弹出对话框选择日期
                DatePickerDialog dialog = new DatePickerDialog(DatePickerActivity.this,
                        new DatePickerDialog.OnDateSetListener() {
                            @Override
                            public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
                                String desc = String.format("您选择的日期是%d年%d月%d日",
                                        year, month + 1, dayOfMonth);
                                tv_date2.setText(desc);
                            }
                        },
                        curYear,
                        curMonth,
                        curDayOfMonth);
                // 显示日期对话框
                dialog.show();
            }
        });
    }
}

特别注意onDateSet的月份参数,它的起始值不是1而是0,所以要加1

三、时间对话框TimePickerDialog

1、时间选择器TimePicker可以让用户选择具体的小时和分钟

2、TimePickerDialog的用法类似DatePickerDialog

3、例子

activity_time_picker.xml

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="5dp"
    tools:context=".TimePickerActivity">

    <TimePicker
        android:id="@+id/tp_time"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:timePickerMode="spinner"/>

    <Button
        android:id="@+id/btn_ok"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="确 定"/>

    <TextView
        android:id="@+id/tv_time"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/btn_time"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="弹出对话框选择时间"/>

    <TextView
        android:id="@+id/tv_time2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

TimePickerActivity.java

java 复制代码
package com.example.chapter05;

import androidx.appcompat.app.AppCompatActivity;

import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;

import java.util.Calendar;

public class TimePickerActivity extends AppCompatActivity {

    private TimePicker tp_time;
    private TextView tv_time;
    private TextView tv_time2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_time_picker);

        tp_time = findViewById(R.id.tp_time);
        tp_time.setIs24HourView(true); // 设置为24小时制

        Button btn_ok = findViewById(R.id.btn_ok);
        Button btn_time = findViewById(R.id.btn_time);

        tv_time = findViewById(R.id.tv_time);
        tv_time2 = findViewById(R.id.tv_time2);

        btn_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String desc = String.format("您选择的时间是%d时%d分",
                        tp_time.getHour(), tp_time.getMinute());
                tv_time.setText(desc);
            }
        });

        btn_time.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 获取日历的一个实例,里面包含了当前的年月日
                Calendar calendar = Calendar.getInstance();
                int curHour = calendar.get(Calendar.HOUR_OF_DAY);
                int curMinute = calendar.get(Calendar.MINUTE);

                // 弹出对话框选择时间
                TimePickerDialog dialog = new TimePickerDialog(TimePickerActivity.this, new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker timePicker, int hour, int minute) {
                        String desc = String.format("您选择的时间是%d时%d分",
                                hour, minute);
                        tv_time2.setText(desc);
                    }
                }, curHour, curMinute, true);
                dialog.show();
            }
        });
    }
}
相关推荐
nono牛2 小时前
Android.bp 配置文件详解---gatekeeperd
android
来来走走2 小时前
Android开发(kotlin) 开发一个简单天气应用
android·kotlin
SweetCode3 小时前
汉诺塔问题
android·java·数据库
音视频牛哥4 小时前
Android 端构建高性能 RTSP 转 RTMP|轻量级RTSP服务 网关:透传与二次编码深度实践
android·音视频·大牛直播sdk·rtsp转rtmp推送·rtsp转发到rtsp服务器·rtsp转rtmp二次编码推送·rtsp二次编码加水印
方白羽5 小时前
Android 16 (Target 36) 应用适配指南
android·app·客户端
微爱帮监所写信寄信5 小时前
微爱帮监狱寄信写信系统后台PHP框架优化实战手册
android·开发语言·人工智能·网络协议·微信·https·php
私人珍藏库6 小时前
[Android] 无印2.2视频解析去水印工具,支持多个平台 2025.12.29更新
android·app·安卓·工具·软件·音乐·music
雨声不在6 小时前
多进程的多语言切换
android
Yang-Never6 小时前
Android 内存泄漏 -> ViewModel持有Activity/Fragment导致的内存泄漏
android·java·开发语言·kotlin·android studio