目录
一、效果展示
二、实现步骤
1.提醒对话框AlertDialog
AlertDialog
名为提醒对话框,它是
Android
中最常用的对话框,可以完成常见的交互操作,例如提示、 确认、选择等功能。由于AlertDialog
没有公开的构造方法,因此必须借助建造器
AlertDialog.Builder才能完成参数设置,AlertDialog.Builder的常用方法说明如下。
- setIcon:设置对话框的标题图标。
- setTitle:设置对话框的标题文本。
- setMessage:设置对话框的内容文本。
- setPositiveButton:设置肯定按钮的信息,包括按钮文本和点击监听器。
- setNegativeButton:设置否定按钮的信息,包括按钮文本和点击监听器。
- setNeutralButton:设置中性按钮的信息,包括按钮文本和点击监听器,该方法比较少用。
通过
AlertDialog.Builder设置完对话框参数,还需调用建造器的
create
方法才能生成对话框实例。最后 调用对话框实例的show
方法,在页面上弹出提醒对话框。
java代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b=findViewById(R.id.b);
b.setOnClickListener(this); //为按钮设置点击监听事件
}
@Override
public void onClick(View v) {
//创建提醒对话框的创建器
AlertDialog.Builder builder=new AlertDialog.Builder(this);
//设置对话框的标题文本
builder.setTitle("美丽的女士");
//设置对话框的内容文本
builder.setMessage("今晚要共进晚餐吗?");
//设置对话框的肯定按钮文本以及点击事件
builder.setNegativeButton("残忍拒绝", (dialog, which) -> Toast.makeText(MainActivity.this, "太令人悲伤了呜呜呜~", Toast.LENGTH_SHORT).show());
//设置对话框的否定按钮文本以及点击事件
builder.setPositiveButton("准时赴约",(dialog, which) -> Toast.makeText(MainActivity.this,"太感动了呜呜呜~",Toast.LENGTH_SHORT).show());
// 根据建造器构建提醒对话框对象
AlertDialog alertDialog=builder.create();
// 显示提醒对话框
alertDialog.show();
}
}
2.日期对话框DatePickerDialog
虽然
EditText
提供了
inputType="date"的日期输入,但是很少有人会手工输入完整日期,况且EditText 还不支持“年**月**日”这样的中文日期,所以系统提供了专门的日期选择器DatePicker
,供用户选择 具体的年月日。不过,DatePicker
并非弹窗模式,而是在当前页面占据一块区域,并且不会自动关闭。 按习惯来说,日期控件应该弹出对话框,选择完日期就要自动关闭对话框。因此,很少直接在界面上显示DatePicker
,而是利用已经封装好的日期选择对话
DatePickerDialog
。 DatePickerDialog相当于在
AlertDialog
上装载了
DatePicker
,编码时只需调用构造方法设置当前的年、月、日,然后调用show
方法即可弹出日期对话框。日期选择事件则由监听
OnDateSetListener
负责响 应,在该监听器的onDateSet
方法中,开发者获取用户选择的具体日期,再做后续处理。特别注意onDateSet的月份参数,它的起始值不是
1
而是
0
。也就是说,一月份对应的参数值为0
,十二月份对应的 参数值为11
,中间月份的数值以此类推。
Java代码:
// 该页面类实现了接口OnDateSetListener,意味着要重写日期监听器的onDateSet方法
public class MainActivity extends AppCompatActivity implements View.OnClickListener, DatePickerDialog.OnDateSetListener {
private Button b;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = findViewById(R.id.b);
b.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId()==R.id.b)
{
Calendar calendar= Calendar.getInstance();
// 构建一个日期对话框,该对话框已经集成了日期选择器。
// DatePickerDialog的第二个构造参数指定了日期监听器
DatePickerDialog datePickerDialog= new DatePickerDialog(this,this,calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH));
// 显示日期对话框
datePickerDialog.show();
}
}
@Override // 一旦点击日期对话框上的确定按钮,就会触发监听器的onDateSet方法
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
// 获取日期对话框设定的年月份 其中onDateSet的月份参数,它的起始值不是1而是0
String desc=String.format("您选择的日期是%d年%d月%d日",year,month+1,dayOfMonth);
Toast.makeText(this, desc, Toast.LENGTH_SHORT).show();
}
}
3.时间对话框TimePickerDialog
既然有了日期选择器,还得有对应的时间选择器。同样,实际开发中也很少直接用
TimePicker
,而是用 封装好的时间选择对话框TimePickerDialog
。该对话框的用法类似
DatePickerDialog
,不同之处主要有两个:
(
1
)构造方法传的是当前的小时与分钟,最后一个参数表示是否采取24
小时制,一般为true
表示小时的数值范围为0~23;若为
false
则表示采取
12
小时制。
(
2
)时间选择监听器为
OnTimeSetListener
,对应需要实现
onTimeSet
方法,在该方法中可获得用户选择的小时和分钟。
从布局文件中设置TimePicker时候固定在页面上的,如果想以对话框的形式出现,还是需要Java代码。TimePicker有两种模式,spinner和clock。
XML代码:
<Button
android:id="@+id/b"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我们什么时候结婚?"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:text="spinner样式的TimePicker"/>
<TimePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:timePickerMode="spinner"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:text="clock样式的TimePicker"/>
<TimePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:timePickerMode="clock"/>
Java代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener, TimePickerDialog.OnTimeSetListener {
private Button b;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = findViewById(R.id.b);
b.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId()==R.id.b)
{
Calendar calendar=Calendar.getInstance();
// 构建一个时间对话框,该对话框已经集成了时间选择器。
// true表示24小时制,false表示12小时制
TimePickerDialog t=new TimePickerDialog(this,this,calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),true);
t.show();
}
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
String desc=String.format("你选择的时间是%d点%d分",hourOfDay,minute);
Toast.makeText(this, desc, Toast.LENGTH_SHORT).show();
}
}