一、提醒对话框AlertDialog
AlertDialog可以完成常见的交互操作,例如提示、确认、选择等功能。AlertDialog借助建造器AlertDialog.Builder才能完成参数设置。
调用建造器的create方法生成对话框实例,再调用对话框实例的show方法,在页面上弹出提醒对话框。
AlertDialog名为提醒对话框,它是Android中最常用的对话框,可以完成常见的交互操作,例如提示、确认、选择等功能。由于AlertDialog没有公开的构造方法,因此必须借助建造器AlertDialog.Builder才能完成参数设置,AlertDialog.Builder的常用方法说明如下:
setIcon: 设置对话框的标题图标 setTile: 设置对话框的标题文本 setMessage: 设置对话框的内容文本
setPositiveButton: 设置肯定按钮的信息,包括按钮文本和点击监听器。 setNegativeButton:
设置否定按钮的信息,包括文本和点击监听器。 setNutralButton:
设置中性按钮的信息,包括按钮文本和点击监听器,该方法比较少用。
通过AlertDialog.Builder设置完对话框参数,还需要调用建造器的create方法才能生成对话框实例。最后调用对话框实例的show方法,在页面上弹出提醒对话框。
实现:
布局文件:
<?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"
>
<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>
业务代码:
public class AlertDialogActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_alert;
private TextView tv_alert;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alert_dialog);
btn_alert = findViewById(R.id.btn_alert);
tv_alert = findViewById(R.id.tv_alert);
btn_alert.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// 创建提醒对话框的构建器
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("尊敬的用户"); // 设置对话框的标题文本
builder.setMessage("你真的要卸载我吗?");// 设置对话框的内容文本
// 设置对话框的坑定按钮文本及其点击监听器
builder.setPositiveButton("残忍卸载", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tv_alert.setText("虽然依依不舍,但是只能离开了");
}
});
// 设置对话框的否定按钮文本机器点击监听器
builder.setNegativeButton("我再想想", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tv_alert.setText("让我再陪你三百六十五个日夜");
}
});
// 根据建造器构建提醒对话框对象
AlertDialog alertDialog = builder.create();
// 显示提醒对话框
alertDialog.show();
}
}
效果展示:
二、日期对话框DatePickerDialog
- 日期选择器DatePicker可以让用户选择具体的年月日。
但DatePicker并非弹窗模式,而是在当前页面占据一块区域,并且不会自动关闭。
DatePickerDialog相当于在AlertDialog上装载了DatePicker,日期选择事件则由监听器OnDateSetListener负责响应,在该监听器的onDateSet方法中,开发者获取用户选择的具体日期,再做后续处理。
日期选择器:
日期对话框:
布局:
layout/activity_date_picker.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"
>
<!-- 日期对话框-->
<Button
android:id="@+id/btn_date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="选择日期"
/>
<!-- datePickerMode 为隐藏右边日历 用calendarViewShown 属性隐藏-->
<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"
/>
</LinearLayout>
业务代码:
public class DatePickerActivity extends AppCompatActivity implements View.OnClickListener, DatePickerDialog.OnDateSetListener {
private Button btn_ok;
private DatePicker dp_date;
private TextView tv_date;
private Button btn_date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_date_picker);
btn_ok = findViewById(R.id.btn_ok);
dp_date = findViewById(R.id.dp_date);
tv_date = findViewById(R.id.tv_date);
btn_date = findViewById(R.id.btn_date);
btn_ok.setOnClickListener(this);
btn_date.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_ok:
// 日期选择器
String desc = String.format("您选择的日期式%d年%d月%d日", dp_date.getYear(), dp_date.getMonth() + 1, dp_date.getDayOfMonth());
tv_date.setText(desc);
break;
case R.id.btn_date:
// 日期弹窗
// 获取日历的一个实例,里面包含了当前的年月日
// Calendar calendar = Calendar.getInstance();
// calendar.get(Calendar.YEAR);
// calendar.get(Calendar.MONTH);
// calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(this, this, 2023, 3, 3);
// 显示日期对话框
datePickerDialog.show();
break;
}
}
// 弹出对话框点击确认之后执行此方法
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
String desc = String.format("您选择的日期式%d年%d月%d日", year, month + 1, dayOfMonth);
tv_date.setText(desc);
}
}
日期选择器效果展示:
日期对话框效果展示:
三、时间对话框TimePickerDialog
时间对话框的使用与日期对话框是一样的
- 时间选择器TimePicker可以让用户选择具体的小时和分钟。
TimePickerDialog的用法类似DatePickerDialog。
样式:
<?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"
>
<!-- 日期对话框-->
<Button
android:id="@+id/btn_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="选择时间"
/>
<!-- timePickerMode属性隐藏下方时钟表-->
<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"
/>
</LinearLayout>
业务代码:
public class TimePickerActivity extends AppCompatActivity implements View.OnClickListener, TimePickerDialog.OnTimeSetListener {
private Button btn_time;
private Button btn_ok;
private TimePicker tp_time;
private TextView tv_time;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_time_picker);
btn_time = findViewById(R.id.btn_time);
btn_ok = findViewById(R.id.btn_ok);
tp_time = findViewById(R.id.tp_time);
tv_time = findViewById(R.id.tv_time);
// 设置24小时制
tp_time.setIs24HourView(true);
btn_ok.setOnClickListener(this);
btn_time.setOnClickListener(this);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_ok:
String desc = String.format("您选择的时间是%d时%d分", tp_time.getHour(), tp_time.getMinute());
tv_time.setText(desc);
break;
case R.id.btn_time:
// 获取日历的一个实例,里面包含了当前的时分秒
Calendar calendar = Calendar.getInstance();
// 构建一个时间对话框,该对话框已经集成了时间选择器
// android.R.style.Theme_Holo_Light_Dialog 设置对话框的主题
TimePickerDialog timePickerDialog = new TimePickerDialog(this, android.R.style.Theme_Holo_Light_Dialog,this, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true);
timePickerDialog.show();
break;
}
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
String desc = String.format("您选择的时间是%d时%d分", hourOfDay, minute);
tv_time.setText(desc);
}
}
效果展示: