参照Google的闹钟源码,提取出来其中的一个部分,获取系统的当前时间,并实时进行更新显示,写成一个控件view,以后有需要的话可以放在自己的App中,当做一个通用的控件来使用。本例子中只是简单的把源代码中的相关内容和逻辑提取了出来,并没有做美化的工作,但思路就是这样的,按个人喜欢去修改就可以了。该控件显示有两种状态,一个是24小时制的时候会显示形如“15:30”的风格,12小时制的时候会显示“8:00上午”的风格,根据自己系统的设定而识别,下面的是显示后的两张截图,图中的时间显示区域就是主要实现的控件了。


图中上下午的显示是根据你的系统的语言而定的,图中是中文显示“上午”,若英文则显示“AM”

                                                                                                   


这个名为DigitalClock的控件继承自LinearLayout,并在其中做了相关的更改与控制,主要的代码块有如下:


注册了一个广播,当检测到系统的时区内容发生变化时,更新下时间以便正确的显示

/** 时区发生变化的广播接收者 */private BroadcastReceiver receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubif (intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED)) {mCalendar = Calendar.getInstance();}updateTime();}};


写一个观察者类,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理

/** 当时间改变时的观察者类 */private class FormatChangeObserver extends ContentObserver {public FormatChangeObserver() {super(new Handler());}@Overridepublic void onChange(boolean selfChange) {// TODO Auto-generated method stubsuper.onChange(selfChange);setDateFormat();updateTime();}}

同时还要在onAttachedToWindow()和onDetachedFromWindow()方法中对观察者进行注册和取消注册

@Overrideprotected void onAttachedToWindow() {// TODO Auto-generated method stubsuper.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();}


@Overrideprotected void onDetachedFromWindow() {// TODO Auto-generated method stubsuper.onDetachedFromWindow();if (!mAttached)return;mAttached = false;getContext().unregisterReceiver(receiver);getContext().getContentResolver().unregisterContentObserver(mFormatChangeObserver);}

这个小控件只是安卓闹钟的电子钟部分,要想实现闹钟还要有好多东西实现,尝试去仿照源码写个小闹钟,不过单独的这个控件也是蛮有用的。


更多相关文章

  1. 如何利用Activity的Dialog风格完成弹出框设计 “第二届 Google
  2. Android窗口管理服务WindowManagerService显示窗口动画的原理分
  3. 实用的Log打印类封装,助尼快速定位源码(android)
  4. 实现ListView的条目下自动隐藏显示Button的方法
  5. Android(安卓)webView中无法显示Twitter主页
  6. 在Android(安卓)studio 中配置高德地图api后显示地图遇到的问题
  7. Android(安卓)菜单开发自定义效果
  8. android GridView设置边框教程。
  9. Android在OnCreate中获取控件的宽度和高度

随机推荐

  1. Android使用NDK进行联网签名认证
  2. android主线程中Looper.loop()为什么不会
  3. AES Crypto 在 Android(安卓)P(Android(安
  4. android中SimpleCursorAdapter _id错误的
  5. android——ListView功能的实现
  6. 总结系列-Android的文件系统
  7. android 笔记handler
  8. Android(安卓)SDK下载和更新失败的解决方
  9. android 图片设置圆角
  10. Android(安卓)获取当前日期 时间