2012-06-21 4 views
1

У меня есть цифровые часы для активности в моем приложении, и я хочу отображать на нем только часы и минуты и не хочу отображать секунды.Как сделать цифровые часы только часы и минуты

+0

Код plz ....... –

+0

Возможный дубликат [Android: DigitalClock удалить секунды] (http://stackoverflow.com/questions/7610549/android-digitalclock -remove-секунд) – Veger

ответ

2

Пожалуйста, обратите внимание на этот ответ здесь, и, насколько я могу видеть, что Вы ищете аналогичный/одно и то же:

Android: DigitalClock remove seconds

Основное содержание ответа следующим образом:

Как AnalogClock, но цифровой. Показывает секунды. FIXME: реализовать отдельные виды в часах/минутах/секундах, поэтому пропорциональные шрифты не shake rendering.

Судя по FIXME, способность скрывать части DigitalClock может быть реализована в конечном итоге. Я ничего не нашел в настоящее время в Javadoc или исходный код, который сделает то, что вы хотите, . Если вы не хотите писать свой собственный класс, который расширяет DigitalClock (или вашу собственную реализацию синхронизации вообще), вы можете просто накрыть секундную часть DigitalClock другим элементом , если это будет служить вашей цели.

1

Система отправляет широковещательное событие в точном начале каждой минуты на основе системных часов. Самый надежный способ сделать это следующим образом:

BroadcastReceiver _broadcastReceiver; 
private final SimpleDateFormat _sdfWatchTime = new SimpleDateFormat("HH:mm"); 
private TextView _tvTime; 

@Override 
public void onStart() { 
    super.onStart(); 
    _broadcastReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context ctx, Intent intent) { 
       if (intent.getAction().compareTo(Intent.ACTION_TIME_TICK) == 0) 
        _tvTime.setText(_sdfWatchTime.format(new Date())); 
      } 
     }; 

    registerReceiver(_broadcastReceiver, new IntentFilter(Intent.ACTION_TIME_TICK)); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (_broadcastReceiver != null) 
     unregisterReceiver(_broadcastReceiver); 
} 

Не забудьте однако инициализировать TextView заранее (для текущего системного времени), так как это, скорее всего, вы будете совать свой пользовательский интерфейс в середине минуты и TextView не будет обновляться до следующей минуты.

1
import android.content.Context; 
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; 

public class DigitalClock extends TextView { 

    Calendar mCalendar; 
    private final static String m24 = "k:mm"; 
    private FormatChangeObserver mFormatChangeObserver; 

    private Runnable mTicker; 
    private Handler mHandler; 

    private boolean mTickerStopped = false; 

    String mFormat; 

    public DigitalClock(Context context) { 
     super(context); 
     initClock(context); 
    } 

    public DigitalClock(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initClock(context); 
    } 

    private void initClock(Context context) { 
     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; 
    } 


    private void setFormat() { 
      mFormat = m24; 

    } 

    private class FormatChangeObserver extends ContentObserver { 
     public FormatChangeObserver() { 
      super(new Handler()); 
     } 

     @Override 
     public void onChange(boolean selfChange) { 
      setFormat(); 
     } 
    } 
} 

Вы можете использовать этот пользовательский вид. Это также работает с пряниками. Измените формат времени по своему усмотрению. (M24)

Смежные вопросы