java Android:DigitalClock 删除秒
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7610549/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Android: DigitalClock remove seconds
提问by Lorenzo Sciuto
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!
问题是它也显示了几秒钟……有一种简单快捷的方法可以隐藏那些吗?我只需要 hh:mm 格式的小时和分钟,而不是 hh:mm:ss!有什么建议?谢谢!
回答by IanTeda
Found the answer here, for anyone else looking for a working answer, here it is:
在这里找到答案,对于其他正在寻找有效答案的人,这里是:
- Clone/copy
DigitalClock.java
from android source 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(); } } }
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" />
Load CustomDigitalClock within activity/fragment
CustomDigitalClock dc = (CustomDigitalClock) mFragmentView.findViewById(R.id.fragment_clock_digital);
DigitalClock.java
从安卓源克隆/复制在 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(); } } }
在布局 xml 中引用自定义类
<com.example.CustomDigitalClock android:id="@+id/fragment_clock_digital" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="DigitalClock" />
在活动/片段中加载 CustomDigitalClock
CustomDigitalClock dc = (CustomDigitalClock) mFragmentView.findViewById(R.id.fragment_clock_digital);
回答by Jason Plank
The DigitalClock Javadocstates:
Class Overview
Like AnalogClock, but digital. Shows seconds. FIXME: implement separate views for hours/minutes/seconds, so proportional fonts don't shake rendering
课程概览
像模拟时钟,但数字。显示秒。FIXME:实现小时/分钟/秒的单独视图,因此比例字体不会影响渲染
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.
根据 判断FIXME
,隐藏部分 DigitalClock 的功能可能最终会实现。我目前在 Javadoc 或源代码中没有找到任何可以执行您想要的操作的内容。
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.
除非您想编写自己的类来扩展 DigitalClock(或您自己的时钟实现),否则您可以只用另一个元素覆盖 DigitalClock 的秒部分,如果它可以满足您的目的。