安卓基础之《(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();
            }
        });
    }
}
相关推荐
千里马学框架5 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台5 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone5 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc5 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo5 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077005 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼5 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone5 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen5 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone5 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui