• Android DigitalClock的不同形式


    public class TimeWidget extends TextView {
     
         Calendar mCalendar;
         private final static String m12 = "h:mm:ss";
         private final static String m24 = "k:mm:ss";
         private FormatChangeObserver mFormatChangeObserver;
     
         private Runnable mTicker;
         private Handler mHandler;
     
         private boolean mTickerStopped = false;
     
         String mFormat;
     
         private static String[] weekdays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
     
         public TimeWidget(Context context, AttributeSet attrs, int defStyle) {
             super(context, attrs, defStyle);
             initClock(context);
         }
     
         public TimeWidget(Context context, AttributeSet attrs) {
             super(context, attrs);
             initClock(context);
         }
     
         public TimeWidget(Context context) {
             super(context);
             initClock(context);
         }
     
         private void initClock(Context context) {
             Resources r = context.getResources();
     
             if (mCalendar == null) {
                 mCalendar = Calendar.getInstance();
             }
     
             mFormatChangeObserver = new FormatChangeObserver();
             //注册,监听系统日期设置数据库的改变
             getContext().getContentResolver().registerContentObserver(Settings.System.CONTENT_URI, true, mFormatChangeObserver);
     
             setFormat();
         }
     
         @Override
         protected void onDetachedFromWindow() {
             super.onDetachedFromWindow();
             mTickerStopped = true;
         }
     
         /**
          * Pulls 12/24 mode from system settings
     */
         private boolean get24HourMode() {
             return android.text.format.DateFormat.is24HourFormat(getContext());
         }
     
         private void setFormat() {
             if (get24HourMode()) {
                 mFormat = m24;
             } else {
                 mFormat = m12;
             }
         }
     
         // format the string of time
         private static String format(int t) {
             String s = "" + t;
             if (s.length() == 1) {
                 s = "0" + s;
             }
             return s;
         }
     
         @Override
         public boolean onTouchEvent(MotionEvent event) {
             Log.i("", "TimeWidget.onTouchEvent");
     
             getContext().startActivity(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS));
     
             return super.onTouchEvent(event);
         }
     
         @Override
         protected void onAttachedToWindow() {
             Log.i("", "TimeWidget.onAttachedToWindow");
             mTickerStopped = false;
             super.onAttachedToWindow();
             mHandler = new Handler();
     
             /**
              * requests a tick on the next hard-second boundary
     */
             mTicker = new Runnable() {
                 public void run() {
                     if (mTickerStopped)
                         return;
                     mCalendar.setTimeInMillis(System.currentTimeMillis());
     
                     int myear = (mCalendar.get(Calendar.YEAR));
                     int mmonth = (mCalendar.get(Calendar.MONTH) + 1);// 月份+1是一年中的第几个月
                     int mmonthday = (mCalendar.get(Calendar.DAY_OF_MONTH));// 一月中的日期
                     final int mweekday = (mCalendar.get(Calendar.DAY_OF_WEEK)) - 1;
     
                     final String mDate = format(myear) + "-" + format(mmonth) + "-" + format(mmonthday);
     
                     setText(DateFormat.format(mFormat, mCalendar) + "  " + mDate + " " + weekdays[mweekday]);
                     invalidate();
                     long now = SystemClock.uptimeMillis();
                     long next = now + (1000 - now % 1000);
                     mHandler.postAtTime(mTicker, next);
                 }
             };
             mTicker.run();
         }
     
         private class FormatChangeObserver extends ContentObserver {
             public FormatChangeObserver() {
                 super(new Handler());
             }
     
             @Override
             public void onChange(boolean selfChange) {
                 setFormat();
             }
         }
     
     }

    最近在做项目中,需要用到一个时间显示的控件,由于android自身DigitalClock只能显示时间,不能显示日期,所以自己就动手对DigitalClock做了一个小小的改造

    android自带的效果如下: 

    改造后的效果:

  • 相关阅读:
    java设计模式----工厂设计模式
    java拓展----CountDownLatch同步辅助类
    java设计模式----单例模式
    java拓展----Lock锁
    Orcal学习----初识Orcal
    java学习----泛型
    java学习----Junit&Log4j
    java学习----注解
    java学习----反射
    java学习----数据解析
  • 原文地址:https://www.cnblogs.com/622698abc/p/2732763.html
Copyright © 2020-2023  润新知