在android中,DatePicker组件和TimePicker组件分别是日期选择器和时间选择器。
该实例中,当点击日期选择器按钮后,弹出日期选择框,用户选择日期后andoid会将日期显示到TextView组件中;当点击时间选择器按钮后,弹出时间选择框,选择后在相应的TextView组件显示时间。
日期选择框和时间选择框在创建实例的过程中,构造方法的参数类似,以下分别介绍:
1、日期选择框创建实例如下
DatePickerDialog datePicker=new DatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth);
其中第二个参数是日期选择框的监听方法,通过该方法可以将选择日期的年月日返回,后三个参数是弹出日期选择框的初始日期显示。
日期选择框的监听方法如下,需要覆写onDateSet()方法。
DatePickerDialog.OnDateSetListener date_callback=new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {//arg1~arg3分别是选择的年月日
textView_Date.setText(String.format("%s年%s月%s日",format_conver(arg1),format_conver(arg2),format_conver(arg3)));//自定义一个format_conver()方法保证格式输出
}
};
2、时间选择框创建实例和日期选择框过程类似,参数基本相同。
TimePickerDialog timePicker=new TimePickerDialog(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView);
其中最后一个参数是时间采用12小时制还是24小时制显示。
时间选择框监听方法如下,需要重写onTimeSet()方法。
TimePickerDialog.OnTimeSetListener time_callback=new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker arg0, int arg1, int arg2) {//arg1表示小时,arg2表示分钟
textView_Time.setText(String.format("%s:%s", format_conver(arg1),format_conver(arg2)));//格式输出
}
};
实例测试代码如下:
首先是布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="main.test_dt_picker.MainActivity">
<TextView
android:id="@+id/tv1_Date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="@string/tv_Date"/>
<Button
android:id="@+id/btn1_Date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_Date" />
<TextView
android:id="@+id/tv2_Time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="@string/tv_Time"/>
<Button
android:id="@+id/btn2_Time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_Time"/>
</LinearLayout>
其次是strings.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Test_DT_Picker</string>
<string name="action_settings">Settings</string>
<string name="tv_Date">None</string>
<string name="tv_Time">None</string>
<string name="btn_Date">日期选择器</string>
<string name="btn_Time">时间选择器</string>
</resources>
再次是android源码文件:
package main.test_dt_picker;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
public class MainActivity extends ActionBarActivity implements OnClickListener{
private Button button_Date=null,button_Time=null;
private TextView textView_Date=null,textView_Time=null;
private DatePickerDialog datePicker=null;
private TimePickerDialog timePicker=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_Date=(Button)findViewById(R.id.btn1_Date);
button_Time=(Button)findViewById(R.id.btn2_Time);
textView_Date=(TextView)findViewById(R.id.tv1_Date);
textView_Time=(TextView)findViewById(R.id.tv2_Time);
button_Date.setOnClickListener(MainActivity.this);
button_Time.setOnClickListener(MainActivity.this);
datePicker=new DatePickerDialog(MainActivity.this, date_callback, 2012, 6, 18);
timePicker=new TimePickerDialog(MainActivity.this, time_callback, 10, 5, true);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
int btn_id=arg0.getId();
switch (btn_id) {
case R.id.btn1_Date: datePicker.show();break;
case R.id.btn2_Time: timePicker.show();break;
default: break;
}
}
DatePickerDialog.OnDateSetListener date_callback=new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
textView_Date.setText(String.format("%s年%s月%s日",format_conver(arg1),format_conver(arg2),format_conver(arg3)));
}
};
TimePickerDialog.OnTimeSetListener time_callback=new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker arg0, int arg1, int arg2) {
textView_Time.setText(String.format("%s:%s", format_conver(arg1),format_conver(arg2)));
}
};
public String format_conver(int s){//该方法为了输出一位数时保证前面加一个0,使之与实现十位数对齐,比如时间是12:5,使用该方法后输出为12:05
return s>=10?""+s:"0"+s;
}
}
最后是三张测试图片:
第一张启动后原图:
点击日期选择框按钮后弹出的日期选择框:
最后测试图片: