さて、本日はDigitalClockの話です。
ネイティブのViewにDigitalClockというものがあります。
これを利用することで、時間を簡単に表示することができます。
しかし、DigitalClockではフォーマット指定により秒数が必ず表示されます。
秒数が非表示のDigitalClockを利用する場合は、
オリジナルDigitalClockを自作することになります。
以下が秒数を非表示にしたオリジナルのDigitalClockです。
SimpleDigitalClock.java
package com.example.digitalclock; import java.util.Calendar; import android.content.Context; import android.os.Handler; import android.os.SystemClock; import android.text.format.DateFormat; import android.util.AttributeSet; import android.widget.TextView; public class SimpleDigitalClock extends TextView { private Calendar mCalendar; private Runnable mTicker; private Handler mHandler; private boolean mTickerStopped = false; private static final String FORMAT = "k:mm"; public SimpleDigitalClock(Context context) { super(context); initClock(); } public SimpleDigitalClock(Context context, AttributeSet attrs) { super(context, attrs); initClock(); } private void initClock() { if (mCalendar == null) { mCalendar = Calendar.getInstance(); } } @Override protected void onAttachedToWindow() { // ViewがWindowにアタッチされたとき(結合したとき)に呼び出される。 mTickerStopped = false; super.onAttachedToWindow(); mHandler = new Handler(); mTicker = new Runnable() { @Override public void run() { if (mTickerStopped) return; mCalendar.setTimeInMillis(System.currentTimeMillis()); setText(DateFormat.format(FORMAT, 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; } }
次に独自ViewをXMLで読み込みます。 activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.example.digitalclock.SimpleDigitalClock android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:textSize="50dp" /> </LinearLayout>
以上で、秒数無しのDigitalClockを利用可能になります。
表示フォーマットを変更したい場合は、SimpleDigitalClockのFORMATを修正してください
0 件のコメント:
コメントを投稿