[Android1.5]DigitalClock自定义日期输出格式

简介:

正文 
 

  一、需求

    修改时间输出格式为仅显示小时和分钟。

 

  二、效果图

    

 

  三、说明

    通过看源码可知,只需修改以下两行代码其他全部复制过来即可:

     private   final   static  String m12  =   " h:mm:ss aa " ;
    
private   final   static  String m24  =   " k:mm:ss " ;

    如果想做得更好更通用的话可以把设置日期格式的方法暴露出来,或者为其增加一个xml属性。

 

  四、完整代码

package  com.test;

import  java.util.Calendar;

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;

/**
 * 自定义DigitalClock输出格式
 * 
@author  农民伯伯
 *
 
*/
public   class  DigitalClock  extends  android.widget.DigitalClock {

    Calendar mCalendar;
    
private   final   static  String m12  =   " h:mm aa " ; // h:mm:ss aa
     private   final   static  String m24  =   " k:mm " ; // k:mm:ss
     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) {
        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();
        }
    }
}


 

  五、使用方法

< com.test.DigitalClock android:layout_x = " 15dp "  android:layout_y = " 30dp "  
            android:layout_width
= " wrap_content "  android:layout_height = " wrap_content "
            android:textColor
= " @android:color/white "  android:textSize = " 55sp "
             android:shadowColor
= " @android:color/white "  android:shadowRadius = " 2.0 "
            
>
        
</ com.test.DigitalClock >

    代码说明:

      关于android:shadowColor可以参见我的中文API文档翻译。



本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582230,如需转载请自行联系原作者

相关文章
|
1月前
|
Android开发 开发者
安卓应用开发中的自定义视图
【9月更文挑战第37天】在安卓开发的海洋中,自定义视图犹如一座座小岛,等待着勇敢的探索者去发现其独特之处。本文将带领你踏上这段旅程,从浅滩走向深海,逐步揭开自定义视图的神秘面纱。
35 3
|
1月前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
65 0
|
6天前
|
搜索推荐 前端开发 Android开发
安卓应用开发中的自定义视图实现
【10月更文挑战第30天】在安卓开发的海洋中,自定义视图是那抹不可或缺的亮色,它为应用界面的个性化和交互体验的提升提供了无限可能。本文将深入探讨如何在安卓平台创建自定义视图,并展示如何通过代码实现这一过程。我们将从基础出发,逐步引导你理解自定义视图的核心概念,然后通过一个实际的代码示例,详细讲解如何将理论应用于实践,最终实现一个美观且具有良好用户体验的自定义控件。无论你是想提高自己的开发技能,还是仅仅出于对安卓开发的兴趣,这篇文章都将为你提供价值。
|
8天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
20 5
|
1月前
|
XML 前端开发 Java
安卓应用开发中的自定义View组件
【10月更文挑战第5天】自定义View是安卓应用开发的一块基石,它为开发者提供了无限的可能。通过掌握其原理和实现方法,可以创造出既美观又实用的用户界面。本文将引导你了解自定义View的创建过程,包括绘制技巧、事件处理以及性能优化等关键步骤。
|
2月前
|
Android开发 开发者
安卓开发中的自定义视图:从入门到精通
【9月更文挑战第19天】在安卓开发的广阔天地中,自定义视图是一块充满魔力的土地。它不仅仅是代码的堆砌,更是艺术与科技的完美结合。通过掌握自定义视图,开发者能够打破常规,创造出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战应用,一步步展示如何用代码绘出心中的蓝图。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创意和效率的大门。让我们一起探索自定义视图的秘密,将你的应用打造成一件艺术品吧!
58 10
|
2月前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
43 3
|
1天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
1天前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
下一篇
无影云桌面