Android: DigitalClock removes seconds

I used this code to add hours to my application:

<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 also shows seconds. Is there an easy and quick way to hide them? I need only a few hours and minutes in the format hh: mm instead of hh: mm: ss! any suggestions? Thanks!

+7
source share
2 answers

The answer is found here , for those who are looking for a working answer, here it is:

  • Clone / copy of DigitalClock.java from android source
  • Change format strings in 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(); } } } 
  • Custom class reference inside xml layout

     <com.example.CustomDigitalClock android:id="@+id/fragment_clock_digital" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="DigitalClock" /> 
  • Loading CustomDigitalClock into action / fragment

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

DigitalClock Javadoc claims:

Class Overview

Similar to AnalogClock, but digital. Shows seconds. FIXME: implement individual views for hours / minutes / seconds, so proportional fonts do not shake rendering

Judging by FIXME , the ability to hide parts of DigitalClock can be realized in the end. I did not find anything in Javadoc or source code that will do what you want.

If you don't want to write your own class that extends DigitalClock (or your own synchronization implementation in general), you can simply cover the second part of DigitalClock with another element if that serves your purpose.

+2
source

All Articles