Time Picker
可以用TimePicker窗口小部件来选择时间,这个小部件允许用户选择小时和分钟。
本教程里,点击界面上的按钮,将弹出一个浮动的时间选择器对话框TimePickerDialog。当用户设置时间后,TextView将显示刚设的时间。
- 创建一个公车:HelloTimePicker.
- 打开
res/layout/main.xml
并修改如下:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/timeDisplay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=""/> <Button android:id="@+id/pickTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Change the time"/> </LinearLayout>
这是一个基本的LinearLayout布局,里面的TextView显示时间,点击Button则打开TimePickerDialog时间选择器对话框。
- 打开
HelloTimePicker.java
并添加下列成员变量:private TextView mTimeDisplay; private Button mPickTime; private int mHour; private int mMinute; static final int TIME_DIALOG_ID = 0;
这些成员变量是布局元素、时分。
TIME_DIALOG_ID
是静态整型值,作为时间选择器对话框的ID。 - 修改
onCreate()
如下:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // capture our View elements mTimeDisplay = (TextView) findViewById(R.id.timeDisplay); mPickTime = (Button) findViewById(R.id.pickTime); // add a click listener to the button mPickTime.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { showDialog(TIME_DIALOG_ID); } }); // get the current time final Calendar c = Calendar.getInstance(); mHour = c.get(Calendar.HOUR_OF_DAY); mMinute = c.get(Calendar.MINUTE); // display the current date updateDisplay(); }
首先,加载main.xml布局文件,然后调用findViewById(int)来获得对TextView和Button的引用,
接着给Button添加一个点击事件监听器View.OnClickListener,因此当点击Button后,
回调函数
showDialog(int)(参数是对话框ID)
将被调用来显示时间选择器对话框。showDialog(int)
方法让当前Activity管理对话框的生命周期,同时调用
onCreateDialog(int)
回调函数显示对话框。在设置点击事件监听器以后,创建一个Calendar对象,读取当前小时、分钟。
最后,调用
updateDisplay()
方法,让TextView显示当前时间。 - 添加
updateDisplay()
和pad()
方法:// updates the time we display in the TextView private void updateDisplay() { mTimeDisplay.setText( new StringBuilder() .append(pad(mHour)).append(":") .append(pad(mMinute))); } private static String pad(int c) { if (c >= 10) return String.valueOf(c); else return "0" + String.valueOf(c); }
updateDisplay()
方法用时分成员变量的值设置mTimeDisplay
TextView。pad()方法将个位数前面加0.
- 添加成员
TimePickerDialog.OnTimeSetListener
,它将在用户设置时间的时候被调用:// the callback received when the user "sets" the time in the dialog private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() { public void onTimeSet(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; mMinute = minute; updateDisplay(); } };
当用户设置好时间(点击"Set" (“设置”)按钮),
onTimeSet()
方法会被调用来更新成员变量时分的值,并更新TextView显示的内容。 - 添加
onCreateDialog(int)
回调函数:@Override protected Dialog onCreateDialog(int id) { switch (id) { case TIME_DIALOG_ID: return new TimePickerDialog(this, mTimeSetListener, mHour, mMinute, false); } return null; }
这是一个Activity回调函数,传递给它的整型ID来自
showDialog(int)
方法(这个方法在按钮的View.OnClickListener监听器里被调用)的参数。当这个ID满足switch条件时,会使用按钮点击事件监听器TimePickerDialog.OnTimeSetListener(前面步骤里创建的)、时分成员变量(在onCreate()末尾被初始化的)来实例化一个TimePickerDialog (时间选择器对话框)。 - 运行应用。
当你按下"Change the time"(“更改时间”)按钮,会看到以下画面:
