【问题标题】:Android DigitalClock remove seconds [closed]Android DigitalClock 删除秒[关闭]
【发布时间】:2012-11-05 19:56:12
【问题描述】:

我想去掉 DigitalClock 的秒数。

我找到了 DigitalCLock 的代码:http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/DigitalClock.java/?v=source

现在我只使用这样的 DigitalClock:

DigitalClock dc = (DigitalClock) findViewById(R.id.digitalClock1);

如何使用来自 GrepCode 的代码?

【问题讨论】:

    标签: android


    【解决方案1】:

    因为 DigitalClock 的格式是私有的,所以最简单的方法是将整个类剪切并粘贴到您的项目中。然后进行一些更改:

    1. 删除每种格式的":ss" 部分,例如将m24 更改为"k:mm";
    2. 将 Runnable 中的刷新率从每秒降低到每分钟:

      long next = now + (60000 - now % 60000);
      

    现在像任何其他小部件一样使用它(在 XML 范围内,它与您的反向包名称):

    <com.example.DigitalClock
        android:width="wrap_content"
        android:height="wrap_content" />
    

    【讨论】:

      【解决方案2】:

      改编自您链接到的 DigitalClock 类。

      package com.t3hh4xx0r.examplewidget
      
      import android.content.Context;
      import android.content.res.Resources;
      import android.database.ContentObserver;
      import android.os.Handler;
      import android.os.SystemClock;
      import android.text.format.DateFormat;
      import android.util.AttributeSet;
      
      import java.util.Calendar;
      
      public class CustomDigitalClock extends TextView {
      
          Calendar mCalendar;
      
          private Runnable mTicker;
          private Handler mHandler;
      
          private boolean mTickerStopped = false;
      
          String mFormat = "h:mm aa";
      
          public DigitalClock(Context context) {
              super(context);
              initClock(context);
          }
      
          public DigitalClock(Context context, AttributeSet attrs) {
              super(context, attrs);
              initClock(context);
          }
      
          private void initClock(Context context) {
              Resources r = mContext.getResources();
      
              if (mCalendar == null) {
                  mCalendar = Calendar.getInstance();
              }
          }
      
          @Override
          protected void 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());
                          setText(DateFormat.format(mFormat, mCalendar));
                          invalidate();
                          long now = SystemClock.uptimeMillis();
                          long next = now + (1000 - now % 1000);
                          mHandler.postAtTime(mTicker, next);
                      }
                  };
              mTicker.run();
          }
      
          @Override
          protected void onDetachedFromWindow() {
              super.onDetachedFromWindow();
              mTickerStopped = true;
          }
      }
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 2011-11-28
      • 2015-09-11
      • 1970-01-01
      相关资源
      最近更新 更多