Android:DigitalClock删除秒

时间:2011-09-30 12:45:18

标签: java android clock digital

我使用此代码为我的应用添加时钟:

  <DigitalClock 
android:id="@+id/digitalclock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:textSize = "30sp"
/>

问题在于它还显示了几秒钟......有一种简单快捷的隐藏方式吗?我需要几小时和几分钟的hh:mm格式而不是hh:mm:ss!有什么建议?谢谢!

2 个答案:

答案 0 :(得分:28)

找到答案here,对于其他寻找合适答案的人来说,这是:

  1. 从Android来源
  2. 克隆/复制DigitalClock.java
  3. 更改新CustomDigitalClock

    中的格式字符串
    package com.example;
    
    import android.content.Context;
    import android.content.res.Resources;
    import android.database.ContentObserver;
    import android.os.Handler;
    import android.os.SystemClock;
    import android.provider.Settings;
    import android.text.format.DateFormat;
    import android.util.AttributeSet;
    import android.widget.TextView;
    
    import java.util.Calendar;
    
    /**
     * You have to make a clone of the file DigitalClock.java to use in your application, modify in the following manner:-
     *      private final static String m12 = "h:mm aa";
     *      private final static String m24 = "k:mm";
     */
    
    public class CustomDigitalClock extends TextView {
    
        Calendar mCalendar;
        private final static String m12 = "h:mm aa";
        private final static String m24 = "k:mm";
        private FormatChangeObserver mFormatChangeObserver;
    
        private Runnable mTicker;
        private Handler mHandler;
    
        private boolean mTickerStopped = false;
    
        String mFormat;
    
        public CustomDigitalClock(Context context) {
            super(context);
            initClock(context);
        }
    
        public CustomDigitalClock(Context context, AttributeSet attrs) {
            super(context, attrs);
            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 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;
        }
    
        /**
         * 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;
            }
        }
    
        private class FormatChangeObserver extends ContentObserver {
            public FormatChangeObserver() {
                super(new Handler());
            }
    
            @Override
            public void onChange(boolean selfChange) {
                setFormat();
            }
        }
    
    }
    
  4. 在布局xml中引用自定义类

    <com.example.CustomDigitalClock
        android:id="@+id/fragment_clock_digital"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="DigitalClock" />
    
  5. 在activity / fragment

    中加载CustomDigitalClock
    CustomDigitalClock dc = (CustomDigitalClock)
    mFragmentView.findViewById(R.id.fragment_clock_digital);
    

答案 1 :(得分:2)

DigitalClock Javadoc州:

  

课程概述

     

像AnalogClock一样,但数码。显示秒数。 FIXME:实施   小时/分钟/秒的单独视图,因此比例字体不会   摇动渲染

根据FIXME判断,最终可能会隐藏部分DigitalClock。我没有在Javadoc或源代码中找到任何你想要的东西。

除非您想编写自己的扩展DigitalClock的类(或者您自己的时钟实现),否则您可以使用另一个元素覆盖DigitalClock的秒部分,如果它可以满足您的目的。