TimePicker和DatePicker类似——都是用于确保用户选择的时间或日期是有效的。TimePicker是时间选择器,支持24小时制和12(AM/PM)小时制。可以用OnTimeChangedListener监听TimePicker时间变化。
先看看效果图:
24小时制TimePicker 12小时制TimePicker
时间发生改变后,显示一个Toast提示时间改变。
下面实现上面的效果:
1、创建布局文件widget_timepicker_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TimePicker
android:id="@+id/show_time_widget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="104dp" />
</RelativeLayout>
2、显示屏幕 WidgetTimePickerActivity.java
package com.xy.zt.selfdefinewieget;
import android.app.Activity;
import android.os.Bundle;
import android.provider.Settings;
import android.widget.TimePicker;
import android.widget.Toast;
public class WidgetTimePickerActivity extends Activity implements
TimePicker.OnTimeChangedListener {
private TimePicker mTimePicker;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.widget_timepicker_layout);
init();
}
private void init() {
mTimePicker = (TimePicker) findViewById(R.id.show_time_widget);
mTimePicker.setOnTimeChangedListener(this);
}
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
Toast.makeText(this, "Time changed in TimePicker", Toast.LENGTH_LONG)
.show();
}
@Override
protected void onResume() {
super.onResume();
String timeStr = Settings.System.getString(getContentResolver(),
Settings.System.TIME_12_24);
boolean is_24 = timeStr != null && timeStr.equals("24");
mTimePicker.setIs24HourView(is_24);
}
}
上述代码各个功能不一一详述了,讲讲我在使用中遇到的一点问题,对代码:
String timeStr = Settings.System.getString(getContentResolver(),
Settings.System.TIME_12_24);
boolean is_24 = timeStr != null && timeStr.equals("24");
第一句中timeStr的值可能为12、24、null,
如果返回值是null,那么如何判断当前的日期是12小时制还是24小时制?有兴趣的童鞋可以研究研究。
为完善工程,还是贴出下面代码,以下内容有不清楚的地方参见一步一步学android控件(之一) —— 开始篇
ViewData.java
public static final int TIME_PICKER_ID = DATE_PICKER_ID + 1;
public static final String TIME_PICKER_NAME = "TimePicker";
private static final ViewData mTimePicker = new ViewData(TIME_PICKER_NAME,
TIME_PICKER_ID);
View_Datas.add(mTimePicker);
WidgetsAdapter.java的handleItemClicked方法添加如下内容
case ViewData.TIME_PICKER_ID:
intent.setClass(mContext, WidgetTimePickerActivity.class);
mContext.startActivity(intent);
break;