现在的位置: 首页 > 综合 > 正文

android 让TextView支持的Html标签实现自定义时钟显示组件DigitalClock

2013年01月02日 ⁄ 综合 ⁄ 共 5303字 ⁄ 字号 评论关闭
android 让TextView支持的Html标签实现自定义时钟显示组件DigitalClock

默认的 DigitalClock显示时分秒的,而且上午 下午 字体大小和时间一样大,要实现的时钟效果是只显示时分,每分钟更新一次,上午 下午字体小一号

用自定义 DigitalClock结合TextView的html功能实现。

<LinearLayout 
android:layout_width="wrap_content"
android:layout_height="wrap_content" 
android:layout_marginLeft="28dip"
android:layout_marginTop="5dip"
android:layout_gravity="center"
android:gravity="center"
android:background="@drawable/watch">
<com.cyberblue.util.MyDigitalClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:layout_gravity="center"
android:gravity="center"
android:textStyle="bold"
android:textSize="29dip" />
</LinearLayout>
===========================================================
package com.cyberblue.util;
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.util.Log;
import android.widget.TextView;
import java.util.Calendar;
/**
 * Like AnalogClock, but digital.  Shows seconds.
 *
 * FIXME: implement separate views for hours/minutes/seconds, so
 * proportional fonts don't shake rendering
 */
public class MyDigitalClock 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 MyDigitalClock(Context context) {
        super(context);
        initClock(context);
    }
    public MyDigitalClock(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());
                    String content = (String) DateFormat.format(mFormat, mCalendar);
                    if(content.split(" ").length > 1){
                   //用span style的方式不起作用--无法解析 <font size=\"1\" 也不起作用
                   content = content.split(" ")[0] + " <small><font size=\"1\" color=\"#66ccff\">" + content.split(" ")[1] + "</font></small>";
                    }
                    setText(android.text.Html.fromHtml(content));
                    invalidate();
                    long now = SystemClock.uptimeMillis();
                    //一分钟更新一次
                    long next = now + (60*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();
        }
    }
}
================================================================
android TextView html
  
TextView textView=(TextView)findViewById(R.id.hello);   
textView.setText(Html.fromHtml("Hello <b>World</b>,<font size=\"3\" color=\"red\">AnalysisXmlActivty!</font>"));   
 
android 支持的Html标签
<a href="...">  定义链接内容
<b>  定义粗体文字   b 是blod的缩写
<big>  定义大字体的文字
<blockquote>  引用块标签 
属性:
Common  -- 一般属性
cite  -- 被引用内容的URI
<br>   定义换行
<cite>   表示引用的URI
<dfn>   定义标签  dfn 是defining instance的缩写
<div align="...">
<em>  强调标签  em 是emphasis的缩写
<font size="..." color="..." face="...">
<h1>
<h2>
<h3>
<h4>
<h5>
<h6>
<i>   定义斜体文字
<img src="...">
<p>     段落标签,里面可以加入文字,列表,表格等
<small>  定义小字体的文字
<strike>   定义删除线样式的文字   不符合标准网页设计的理念,不赞成使用.   strike是strikethrough的缩写
<strong>   重点强调标签
<sub>   下标标签   sub 是subscript的缩写
<sup>   上标标签   sup 是superscript的缩写
<tt>   定义monospaced字体的文字  不赞成使用.  此标签对中文没意义  tt是teletype or monospaced text style的意思
<u>   定义带有下划线的文字  u是underlined text style的意思

 ===============================================

另附:如何获取Android系统时间是24小时制还是12小时制
        ContentResolver cv = this.getContentResolver();
        String strTimeFormat = android.provider.Settings.System.getString(cv,
                                           android.provider.Settings.System.TIME_12_24);
        
        if(strTimeFormat.equals("24"))
       {
              Log.i("activity","24");
        }
   
----------------------------------------------------------------------
   <?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:gravity="center_horizontal"  
    > 
<!-- 定义模拟时钟 --> 
<AnalogClock   
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    />  
<!-- 定义数字时钟 --> 
<DigitalClock 
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:textSize="14pt" 
    />    

</LinearLayout>  

 

抱歉!评论已关闭.