Android:DigitalClock 删除秒数

发布于 2024-12-07 13:06:02 字数 326 浏览 0 评论 0原文

我使用这段代码向我的应用程序添加时钟:

  <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!有什么建议吗?谢谢!

I used this code for adding a clock to my app:

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

The problem is that it shows also seconds..there is a simple and fast way for hide those? I need just hours and minutes in hh:mm format instead of hh:mm:ss! any suggestions? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

箹锭⒈辈孓 2024-12-14 13:06:02

此处找到了答案,对于其他正在寻找有效答案的人来说,这里是:

  1. 从 Android 源克隆/复制 DigitalClock.java
  2. 更改新 CustomDigitalClock 中的格式字符串

    package com.example;
    
    导入 android.content.Context;
    导入 android.content.res.Resources;
    导入 android.database.ContentObserver;
    导入 android.os.Handler;
    导入 android.os.SystemClock;
    导入 android.provider.Settings;
    导入 android.text.format.DateFormat;
    导入 android.util.AttributeSet;
    导入 android.widget.TextView;
    
    导入 java.util.Calendar;
    
    /**
     * 您必须克隆文件 DigitalClock.java 才能在您的应用程序中使用,按以下方式修改:-
     * private Final static String m12 = "h:mm aa";
     * 私有最终静态字符串 m24 = "k:mm";
     */
    
    公共类 CustomDigitalClock 扩展 TextView {
    
        日历 mCalendar;
        私有最终静态字符串 m12 = "h:mm aa";
        私有最终静态字符串 m24 = "k:mm";
        私有FormatChangeObserver mFormatChangeObserver;
    
        私有可运行 mTicker;
        私有处理程序mHandler;
    
        私有布尔值 mTickerStopped = false;
    
        字符串mFormat;
    
        公共 CustomDigitalClock(上下文上下文){
            超级(上下文);
            initClock(上下文);
        }
    
        公共 CustomDigitalClock(上下文上下文,AttributeSet attrs){
            超级(上下文,属性);
            initClock(上下文);
        }
    
        私有无效 initClock(上下文上下文){
            资源 r = context.getResources();
    
            如果(mCalendar == null){
                mCalendar = Calendar.getInstance();
            }
    
            mFormatChangeObserver = new FormatChangeObserver();
            getContext().getContentResolver().registerContentObserver(
                    Settings.System.CONTENT_URI, true, mFormatChangeObserver);
    
            设置格式();
        }
    
        @覆盖
        受保护无效 onAttachedToWindow() {
            mTickerStopped = false;
            super.onAttachedToWindow();
            mHandler = new Handler();
    
            /**
             * 请求在下一个硬秒边界上打勾
             */
            mTicker = 新的 Runnable() {
                    公共无效运行(){
                        如果(mTickerStopped)返回;
                        mCalendar.setTimeInMillis(System.currentTimeMillis());
                        setText(DateFormat.format(mFormat, mCalendar));
                        无效();
                        现在很长= SystemClock.uptimeMillis();
                        长下一个 = 现在 + (1000 - 现在 % 1000);
                        mHandler.postAtTime(mTicker, 下一个);
                    }
                };
            mTicker.run();
        }
    
        @覆盖
        受保护无效 onDetachedFromWindow() {
            super.onDetachedFromWindow();
            mTickerStopped = true;
        }
    
        /**
         * 从系统设置中提取 12/24 模式
         */
        私有布尔 get24HourMode() {
            返回 android.text.format.DateFormat.is24HourFormat(getContext());
        }
    
        私有无效 setFormat() {
            如果(get24HourMode()){
                m格式=m24;
            } 别的 {
                m格式 = m12;
            }
        }
    
        私有类 FormatChangeObserver 扩展 ContentObserver {
            公共 FormatChangeObserver() {
                超级(新处理程序());
            }
    
            @覆盖
            公共无效onChange(布尔selfChange){
                设置格式();
            }
        }
    
    }
    
  3. 在布局 xml 中引用自定义类

    
    
  4. 在 Activity/fragment 中加载 CustomDigitalClock

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

Found the answer here, for anyone else looking for a working answer, here it is:

  1. Clone/copy DigitalClock.java from android source
  2. Change format strings within new 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();
            }
        }
    
    }
    
  3. Reference custom class within in layout xml

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

    CustomDigitalClock dc = (CustomDigitalClock)
    mFragmentView.findViewById(R.id.fragment_clock_digital);
    
荒人说梦 2024-12-14 13:06:02

DigitalClock Javadoc 指出:

类概述

像 AnalogClock,但是是数字的。显示秒。修复:实施
小时/分钟/秒的单独视图,因此比例字体不会
抖动渲染

FIXME来看,隐藏部分DigitalClock的能力最终可能会实现。我目前在 Javadoc 或源代码中没有找到任何可以实现您想要的功能的内容。

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

The DigitalClock Javadoc states:

Class Overview

Like AnalogClock, but digital. Shows seconds. FIXME: implement
separate views for hours/minutes/seconds, so proportional fonts don't
shake rendering

Judging by the FIXME, the ability to hide portions of DigitalClock might be implemented eventually. I didn't find anything currently in the Javadoc or source code that would do what you want it to.

Unless you want to write your own class that extends DigitalClock (or your own clock implementation altogether), you could just cover the seconds portion of the DigitalClock with another element if it would serve your purpose.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文