参照Google的闹钟源码,提取出来其中的一个部分,获取系统的当前时间,并实时进行更新显示,写成一个控件view,以后有需要的话可以放在自己的App中,当做一个通用的控件来使用。本例子中只是简单的把源代码中的相关内容和逻辑提取了出来,并没有做美化的工作,但思路就是这样的,按个人喜欢去修改就可以了。该控件显示有两种状态,一个是24小时制的时候会显示形如“15:30”的风格,12小时制的时候会显示“8:00上午”的风格,根据自己系统的设定而识别,下面的是显示后的两张截图,图中的时间显示区域就是主要实现的控件了。
图中上下午的显示是根据你的系统的语言而定的,图中是中文显示“上午”,若英文则显示“AM”
这个名为DigitalClock的控件继承自LinearLayout,并在其中做了相关的更改与控制,主要的代码块有如下:
注册了一个广播,当检测到系统的时区内容发生变化时,更新下时间以便正确的显示
/** 时区发生变化的广播接收者 */
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if (intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED)) {
mCalendar = Calendar.getInstance();
}
updateTime();
}
};
写一个观察者类,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理
/** 当时间改变时的观察者类 */
private class FormatChangeObserver extends ContentObserver {
public FormatChangeObserver() {
super(new Handler());
}
@Override
public void onChange(boolean selfChange) {
// TODO Auto-generated method stub
super.onChange(selfChange);
setDateFormat();
updateTime();
}
}
同时还要在onAttachedToWindow()和onDetachedFromWindow()方法中对观察者进行注册和取消注册
@Override
protected void onAttachedToWindow() {
// TODO Auto-generated method stub
super.onAttachedToWindow();
if (mAttached)
return;
mAttached = true;
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_CHANGED);
filter.addAction(Intent.ACTION_TIME_TICK);
filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
getContext().registerReceiver(receiver, filter);
mFormatChangeObserver = new FormatChangeObserver();
getContext().getContentResolver().registerContentObserver(
Settings.System.CONTENT_URI, true, mFormatChangeObserver);
updateTime();
}
@Override
protected void onDetachedFromWindow() {
// TODO Auto-generated method stub
super.onDetachedFromWindow();
if (!mAttached)
return;
mAttached = false;
getContext().unregisterReceiver(receiver);
getContext().getContentResolver().unregisterContentObserver(
mFormatChangeObserver);
}
这个小控件只是安卓闹钟的电子钟部分,要想实现闹钟还要有好多东西实现,尝试去仿照源码写个小闹钟,不过单独的这个控件也是蛮有用的。
分享到:
相关推荐
android 自定义时钟控件
这是一个简单的android的自定义时间控件,用来模拟时钟的指针运行
自定义时钟控件
自己写的一个自定义时钟,是那种传统的时钟,会根据系统时间而改变时针,分针,秒针,适合初学者使用,用Android studio来写的
Android 自定义控件时钟
android自定义控件之时钟组件,用到了较多的自定义控件技术,给大家一个参考
android模拟时钟控件 android studio
Android自定义View之组合控件 ---- LED数字时钟
Android 自定义控件与特效 1. 自定义属性 2. 自定义View 3. 动态广告控件 4. 时钟控件 ...
自定义时钟控件的图片资源
主要介绍了Android编程基于自定义控件实现时钟功能的方法,结合实例形式详细分析了Android自定义控件的定义及时钟功能相关实现技巧,需要的朋友可以参考下
主要介绍了Android自定义控件实现时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
TClock 类似时钟的自定义控件包含事件监听
最近研究自定义控件一段时间了,看到网上有自定义模拟时钟效果,于是自已本着已于技术试了下,终于搞定了,特上传代码,一起分享。更多详细解释请关注我的csdn:...
Android Widget桌面小控件 特点:快捷、方便 个性化、可自定义功能 可及时控制更新Widget显示内容 1、绘制Widget布局 ——> 2、配置Widget的基本属性 ——> 3、定义AppWidgetProvider ——> 4、提供...
Android自定义控件,精美时钟下载,图片和代码都包含在里面了,自己放到对应文件夹运行即可。
android 安卓 自定义 时钟 表盘 钟表
Android自定义控件,里面有lol技能分析板、时钟、还有个加速球(可能不是很完善)