Android中关于日期和时间的几个相关控件的使用,包括DatePicker(日期选择控件)、TimePicker(时间选择控件)、DatePickerDialog(日期选择对话框)、TimePickerDialog(时间选择对话框);
一、DatePicker、TimePicker
DatePicker、TimePicker都继承自android.widget.FrameLayout,并且默认展示风格、与操作风格也类似。DatePicker用于展示一个日期选择控件,TimePicker用于展示一个时间选择控件。
1、DatePicker可以通过设置属性来确定日期选择范围,也可以通过定义好的方法获取到当前选中的时间,并且在修改日期的时候,有响应的事件对其进行响应。
DatePicker常用的属性:
android:calendarViewShown:设置该日期选择是否显示CalendarView组件。
android:endYear:设置日期选择器允许选择的最后一年。
android:maxDate:设置该日期选择器的最大日期。以mm/dd/yyyy格式指定最大日期。
android:minDate:设置该日期选择器的最小日期。以mm/dd/yyyy格式指定最小日期。
android:spinnersShown:设置该日期选择器是否显示Spinner日期选择组件。
android:startYear:设置日期选择器允许选择的第一年。
DatePicker的方法而言,除了常用获取属性的setter、getter方法之外,还需要特别注意一个初始化的方法init()方法,用于做DatePicker控件的初始化,并且设置日期被修改后,回调的响应事件。此方法的签名如下:
init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener)
从上面的init()方法可以看到,DatePicker被修改时响应的事件是DatePicker.OnDateChangedListener事件,如果要响应此事件,需要实现其中的onDateChanged()方法,其中参数从签名即可了解意思,这里不再累述。
onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
datepicker_layout.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".TimePickerActivity">
<DatePicker
android:id="@+id/date_picker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:datePickerMode="spinner"
android:calendarViewShown="true"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
相应的业务实现类:
public class TimePickerActivity extends AppCompatActivity {
private DatePicker mDatePicker;//日期选择器
private Calendar mCalendar;//日历
private int mYear;//年
private int mMonth;//月
private int mDay;//日
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_time_picker);
mCalendar = Calendar.getInstance();
//获取对应的年月日
mYear = mCalendar.get(Calendar.YEAR);
mMonth = mCalendar.get(Calendar.MONTH);
mDay = mCalendar.get(Calendar.DAY_OF_MONTH);
//绑定
mDatePicker = findViewById(R.id.date_picker);
//初始化
mDatePicker.init(mYear, mMonth, mDay, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker datePicker, int year, int month, int day) {
Toast.makeText(TimePickerActivity.this,year+"年"+(month+1)+"月"+day+"日",Toast.LENGTH_LONG).show();
}
});
}
}
2、TimePicker
TimePicke主要是供用户选择时间,在FrameLayout的基础上提供了一些方法来获取当前用户所选择的时间,如果程序需要获取用户选择的时间则可通过为TimePicker添加 OnTimeChangedListener 进行监听来实现。
TimePicker常用方法有如下几个:
is24HourView():判断是否为24小时制。
setIs24HourView():设置是否为24小时制显示。
getCurrentXxx():获取当前时间。
setCurrentXxx():设置当前时间。
setOnTimeChangedListener():设置时间被修改的回调方法。
TimePicker控件被修改的回调方法,通过setOnTimeChangedListener()方法设置,其传递一个TimePicker.OnTimeChangedListener接口,需要实现其中的onTimeChanged()方法。
下面是相应的XML文件:
<TimePicker
android:id="@+id/time_picker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:timePickerMode="spinner"
/>
相应的业务实现:
private TimePicker mTimePicker;//时间选择器
//时间选择器绑定
mTimePicker = findViewById(R.id.time_picker);
mTimePicker.setIs24HourView(true);
mTimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay,
int minute) {
Toast.makeText(TimePickerActivity.this,
hourOfDay + "小时" + minute + "分钟",
Toast.LENGTH_SHORT).show();
}
});
二、DatePickerDialog、TimePickerDialog
DatePickerDialog\TimePickerDialog是两个对话框控件,一个弹出对话框用于选择日期,一个弹出对话框用于选择时间,都继承自android.app.AlertDialog。
这两个控件的开发过程,其主要就是开发其选择后日期或时间后,相应的事件。
对于DatePickeDialog而言,通过构造函数可以设置弹出的日期控件的初始值,并且可以指定选中日期后,回调事件的实现,构造函数的签名如下:
DatePickerDialog(Context context, int Theme,DatePickerDialog.OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth)
其中DatePickerDialog.OnDateSetListener为日期选中的响应事件,其他为日期弹出窗口初始化的日期,对于一个OnDateSetListener接口而言,需要实现其中的onDateSet()方法,在这个方法内,可以得到用户选中的日期。
对于TimePickerDialog而言,同样可以通过构造函数设置初始值,并且设定选中日期后,回调事件的实现,构造函数的签名如下:
TimePickerDialog(Context context, int Theme,TimePickerDialog.OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView)
其中TimePickerDialog.OnTimeSetListener为时间选中的响应事件,其他为时间弹出窗口初始化的时间,对于一个OnTimeSetListener接口而言,需要实现其中的onTimeSet()方法,在这个方法内,可以得到用户选中的时间。
相应业务实现:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".TimePickerActivity">
<Button
android:id="@+id/but"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="dateClick"
android:text="点击" />
<Button
android:id="@+id/but2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="timeClick"
android:text="点击" />
</LinearLayout>
java类实现:
public void dateClick(View v) {
Calendar calendar = Calendar.getInstance();
DatePickerDialog datePickerDialog = new DatePickerDialog(
TimePickerActivity.this,AlertDialog.THEME_HOLO_LIGHT, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year,
int monthOfYear, int dayOfMonth) {
//获取选中时间进行相应的业务实现
Toast.makeText(TimePickerActivity.this, year + "年" + (monthOfYear + 1) + "月" + dayOfMonth + "日", Toast.LENGTH_LONG).show();
}
}, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH));
datePickerDialog.show();
}
public void timeClick(View v) {
Calendar calendar = Calendar.getInstance();
TimePickerDialog dialog = new TimePickerDialog(TimePickerActivity.this,AlertDialog.THEME_HOLO_LIGHT, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int hour, int minute) {
//获取选中时间进行相应的业务实现
Toast.makeText(TimePickerActivity.this,
hour + "小时" + minute + "分钟",
Toast.LENGTH_SHORT).show();
}
}, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true); //true为24小时制
dialog.show();
}
网友评论