概述
最近在公司的项目中有一个设置闹钟的功能,在设置时间上选择了Android系统自带的控件TimePicker,使用起来呢比较简单,它自带有2种样式属性,一种是clock,一种是spinner,我用的是spinner形式,在我的项目中,一开始单纯的使用时发现,当系统时间制为24小时制的时候显示是没问题的,但是当系统时间制改为12小时制的时候TextView显示的还是24小时制的时间。所以我在TimePicker的基础使用上还加入了2个功能,一个是根据系统的时间制来将时间显示为12或者24小时制的形式,另一个功能是跟随系统时间的变化,TimePicker一分钟更新一次。下面来介绍它的使用步骤:
1.先来看看布局文件:很简单,就是一个TimePicker控件
<TimePicker
android:id="@+id/timePicker"
android:layout_width="match_parent"
android:layout_height="200dp"
android:timePickerMode="spinner"
android:layout_below="@+id/rl_timer"
android:visibility="gone"/>
2.先来看看第一个功能的实现,跟随系统时间制变化时间显示:
//获取当前系统的时间制
ContentResolver contentResolver = getContentResolver();
data = android.provider.Settings.System.getString(contentResolver, android.provider.Settings.System.TIME_12_24);
//设置初始状态的时间值
final Calendar calender = Calendar.getInstance();
mHour = calender.get(Calendar.HOUR_OF_DAY);//系统当前的小时值
mMinute = calender.get(Calendar.MINUTE);//系统当前的分钟值
if (data.equals("12")) {//如果为12小时制
if (mHour > 12) {//如果当前时间值大于12,则显示时减去12
tv_time.setText(genHour(mHour - 12) + ":" + genMinute(mMinute));
tv_pm.setText(getString(R.string.clock_aty_pm));
} else {//如果当前时间值小于等于12则直接显示
tv_time.setText(genHour(mHour) + ":" + genMinute(mMinute));
tv_pm.setText(getString(R.string.clock_aty_am));
}
} else if (data.equals("24")) {//如果为24小时制则正常显示
tv_time.setText(genHour(mHour) + ":" + genMinute(mMinute));
tv_pm.setText(mHour >= 12 ? getString(R.string.clock_aty_pm) : getString(R.string.clock_aty_am));
}
3.给TimePicker设置监听器,监听时间选择的改变,里面也加了时间制显示的功能:
timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
if (data.equals("24")) {//如果为24小时制
tv_time.setText(genHour(hourOfDay) + ":" + genMinute(minute));//预约时间显示
boolean isPm = hourOfDay >= 12;
tv_pm.setText(isPm ? getString(R.string.clock_aty_pm) : getString(R.string.clock_aty_am));
} else if (data.equals("12")) {//如果为12小时制
if (hourOfDay > 12) {
tv_time.setText(genHour(hourOfDay-12) + ":" + genMinute(minute));//预约时间显示
tv_pm.setText(getString(R.string.clock_aty_pm));
} else {
tv_time.setText(genHour(hourOfDay) + ":" + genMinute(minute));
tv_pm.setText(hourOfDay >= 12 ? getString(R.string.clock_aty_pm) : getString(R.string.clock_aty_am));
}
}
}
});
}
4.上述方法中给小于10的小时和分钟数自动加“0”的方法:
public String genMinute(int minute) {
String minute_;
if (minute < 10) {
minute_ = "0" + minute;
} else {
minute_ = minute + "";
}
return minute_;
}
public String genHour(int hour) {
String hour_;
if (hour < 10) {
hour_ = "0" + hour;
} else {
hour_ = hour + "";
}
return hour_;
}
5.上述代码即可实现第一个功能,跟随系统时间制来显示时间。接下来我们来实现第二个功能,跟随系统时间变化显示,这里用到Android自带的广播,其实当时间变化的时候系统会自动发送广播,所以我们只用写一个广播来接收即可
6.在onCreate中初始化广播:
private void initReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_TICK);
receiver = new SystemTimeChangedReceiver();
registerReceiver(receiver,filter);
}
Intent.ACTION_TIME_TICK为系统自带监听每分钟变化的广播,还有其它的类型,这里不再赘述,有需要的朋友可自行添加
7.自定义广播接收者:
class SystemTimeChangedReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_TIME_TICK)){
setCurTime();
}
}
}
当接收到系统分钟数变化的时候就调用setCurtime方法重新设置TimePicker的时间
public void setCurTime() {
Calendar c = Calendar.getInstance();
timePicker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));
timePicker.setCurrentMinute(c.get(Calendar.MINUTE));
}
8.最后别忘了在onDestroy中注销广播哦
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
9.好啦,以上就可以实现TimePicker跟随系统时间制以相同时间制显示时间和跟随系统分钟变化而变化的功能啦,希望对给小伙伴能有所帮助,有不足的地方欢迎指出交流,共同学习进步!
最后
以上就是自然路人为你收集整理的Android TimePicker控件的基本使用+监听系统时间变化的全部内容,希望文章能够帮你解决Android TimePicker控件的基本使用+监听系统时间变化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复