- Android Studio开发实战:从零基础到App上线 (移动开发丛书)
- 欧阳燊
- 914字
- 2020-11-28 17:31:45
5.1 日期时间控件
本节介绍Android的日期时间控件,主要是日期选择对话框DatePickerDialog和时间选择对话框TimePickerDialog的用法。
5.1.1 日期选择器DatePicker
虽然EditText控件提供inputType="date"的日期输入,但是很少有用户会老老实实地手工输入日期,况且EditText还不支持“****年**月**日”这样的日期格式,所以都要系统提供日期控件,供用户选择具体的年月日,在Android中这个控件是DatePicker。不过,DatePicker并非弹窗模式,而是直接在页面上占据一块区域,并且不会自动关闭。按习惯来说,日期控件应该在当前页面弹出,选择完日期就要把控件关掉。因此,DatePicker不适合直接使用,实际开发中用的是已经封装好的日期选择对话框DatePickerDialog。
DatePickerDialog相当于在AlertDialog上加载了DatePicker,用起来更简单,只需调用构造函数设置一下当前年、月、日,然后调用show方法即可弹出日期对话框。日期选择事件由监听器OnDateSetListener负责响应,在该监听器实现的onDateSet方法中,开发者能够获得用户选择的具体日期,并做后续处理。这里要特别注意onDateSet方法的月份参数,该参数的起始值不是1而是0。也就是说,一月份对应的参数数值是0,十二月份对应的参数数值是11。如果实在不理解,记住这里的月份值要加1就行了。
图5-1所示为一个默认样式的日期选择对话框。其中,年、月、日通过上下滑动选择。
图5-1 日期选择对话框
下面是使用日期对话框的代码:
public class DatePickerActivity extends AppCompatActivity implements OnClickListener, OnDateSetListener { private TextView tv_date; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_date_picker); tv_date = (TextView) findViewById(R.id.tv_date); findViewById(R.id.btn_date).setOnClickListener(this); } @Override public void onClick(View v) { if (v.getId() == R.id.btn_date) { Calendar calendar = Calendar.getInstance(); DatePickerDialog dialog = new DatePickerDialog(this, this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); dialog.show(); } } @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { String desc = String.format("您选择的日期是%d年%d月%d日", year, monthOfYear+1, dayOfMonth); tv_date.setText(desc); } }
5.1.2 时间选择器TimePicker
有了日期选择器,肯定有对应的时间选择器。同样,实际开发中也不直接用TimePicker,而是用封装好的时间选择对话框TimePickerDialog。该对话框的用法类似DatePickerDialog,不同之处主要有两个:
(1)构造函数传的是当前的小时与分钟,最后一个参数表示是否采用二十四小时制,一般传true,表示小时的数值范围为0~23。
(2)时间选择监听器是OnTimeSetListener,对应需要实现的方法是onTimeSet,在该方法中可获得用户选好的小时和分钟。
图5-2所示为一个默认样式的时间选择对话框。其中,小时与分钟可通过上下滑动选择。
图5-2 时间选择对话框
下面是使用时间对话框的代码:
public class TimePickerActivity extends AppCompatActivity implements OnClickListener, OnTimeSetListener { private TextView tv_time; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_time_picker); tv_time = (TextView) findViewById(R.id.tv_time); findViewById(R.id.btn_time).setOnClickListener(this); } @Override public void onClick(View v) { if (v.getId() == R.id.btn_time) { Calendar calendar = Calendar.getInstance(); TimePickerDialog dialog = new TimePickerDialog(this, this, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true); dialog.show(); } } @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { String desc = String.format("您选择的时间是%d时%d分", hourOfDay, minute); tv_time.setText(desc); } }