Android基础知识之控件系列(4)——CheckedTextView、Chronometer、DigitalClock类

来源:互联网 发布:上位机用什么编程 编辑:程序博客网 时间:2024/05/20 08:26

这一次,我倾尽所有,换你一世陪伴。

今天要介绍的是CheckedTextView、Chronometer、DigitalClock这三个类。源码很简单,继承自TextView。

这里写图片描述

代码主要有四个,依次给出代码。最后一个是自定义控件,DigitalClock,我为了省劲类名直接用原类名,不建议这样。

  • MainActivity.java
package com.im.wu.textviewremainpractice;import android.graphics.drawable.Drawable;import android.os.SystemClock;import android.os.Vibrator;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.CheckedTextView;import android.widget.Chronometer;public class MainActivity extends AppCompatActivity {    private CheckedTextView checkedTextView1;    private CheckedTextView checkedTextView2;    private CheckedTextView checkedTextView3;    private Chronometer chronometer;    private Button btn_start;    private Button btn_stop;    private Button btn_base;    private Button btn_format;    private Vibrator vibrator;//震动服务    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        checkedTextView1=(CheckedTextView)findViewById(R.id.checkedTextView1);        checkedTextView2=(CheckedTextView)findViewById(R.id.checkedTextView2);        checkedTextView3=(CheckedTextView)findViewById(R.id.checkedTextView3);        btn_start = (Button) findViewById(R.id.btn_start);        btn_stop = (Button) findViewById(R.id.btn_stop);        btn_base = (Button) findViewById(R.id.btn_base);        btn_format = (Button) findViewById(R.id.btn_format);        btn_start.setOnClickListener(new ButtonClickListener());        btn_stop.setOnClickListener(new ButtonClickListener());        btn_base.setOnClickListener(new ButtonClickListener());        btn_format.setOnClickListener(new ButtonClickListener());        chronometer = (Chronometer) findViewById(R.id.chronometer);        chronometer.setFormat("计时时间:(%s)");        vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);// 获取震动服务        chronometer = (Chronometer) findViewById(R.id.chronometer);        chronometer                .setOnChronometerTickListener(new OnChronometerTickListenerImpl());        //设置checkedTextView1为选中状态        checkedTextView1.setChecked(true);        //设置checkedTextView2的页边距,即距上/下/左/右各20像素,默认为未选中状态        checkedTextView2.setPadding(20, 20, 20, 20);        //设置checkedTextView3为选中状态,并更改其显示图标,使用android系统资源arrow_down_float        checkedTextView3.setChecked(true);        checkedTextView3.setCheckMarkDrawable(android.R.drawable.arrow_down_float);        //设置checkedTextView4反转状态,由默认的未选中反转为选中状态        checkedTextView1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                checkedTextView1.toggle();            }        });        //点击状态后变更相反,如选中变为未选中,未选中的变为选中        checkedTextView2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                checkedTextView2.toggle();            }        });        //点击状态后变更相反,即下三角转化为上三角符号        checkedTextView3.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                if(!checkedTextView3.isChecked()){                    checkedTextView3.setCheckMarkDrawable(android.R.drawable.arrow_down_float);                    checkedTextView3.setChecked(true);                }else {                    checkedTextView3.setCheckMarkDrawable(android.R.drawable.arrow_up_float);                    checkedTextView3.setChecked(false);                }            }        });    }    public class OnChronometerTickListenerImpl implements // 计时监听事件,随时随地的监听时间的变化            Chronometer.OnChronometerTickListener {        @Override        public void onChronometerTick(Chronometer chronometer) {            String time = chronometer.getText().toString();            if ("00:05".equals(time)) {// 判断五秒之后,让手机震动                vibrator.vibrate(new long[] { 1000, 10, 100, 10 }, 0);// 设置震动周期和是否循环震动,如果不想循环震动把0改为-1            }        }    }    public class ButtonClickListener implements View.OnClickListener {        @Override        public void onClick(View v) {            switch (v.getId()) {                case R.id.btn_start:                    chronometer.start();// 开始计时                    break;                case R.id.btn_stop:                    chronometer.stop();// 停止计时                    break;                case R.id.btn_base:                    chronometer.setBase(SystemClock.elapsedRealtime());// 复位键                    break;                case R.id.btn_format:                    chronometer.setFormat("显示时间:%s.");// 更改时间显示格式                    break;                default:                    break;            }        }    }}
  • activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <CheckedTextView        android:id="@+id/checkedTextView1"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:checkMark="?android:attr/listChoiceIndicatorMultiple"        android:text="@string/checkedTextView1"        />    <CheckedTextView        android:id="@+id/checkedTextView2"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:checkMark="?android:attr/listChoiceIndicatorMultiple"        android:text="@string/checkedTextView2"        />    <CheckedTextView        android:id="@+id/checkedTextView3"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:checkMark="?android:attr/listChoiceIndicatorMultiple"        android:text="@string/checkedTextView3"        />    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:orientation="horizontal" >        <Button            android:id="@+id/btn_start"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="开始" />        <Button            android:id="@+id/btn_stop"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="停止" />        <Button            android:id="@+id/btn_base"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="复位" />        <Button            android:id="@+id/btn_format"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="格式化" />    </LinearLayout>    <Chronometer        android:id="@+id/chronometer"        android:layout_width="fill_parent"        android:layout_height="wrap_content" />    <com.im.wu.textviewremainpractice.DigitalClock        android:id="@+id/DigitalClock"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textColor="@android:color/darker_gray"        android:textSize="55sp"        android:shadowColor="@android:color/holo_red_dark"        android:shadowRadius="2.0"        android:layout_gravity="center_horizontal">    </com.im.wu.textviewremainpractice.DigitalClock></LinearLayout>
  • strings.xml
<resources>    <string name="app_name">TextViewRemainPractice</string>    <string name="checkedTextView1">TextView多选框1</string>    <string name="checkedTextView2">TextView多选框2</string>    <string name="checkedTextView3">TextView多选框3</string></resources>
  • DigitalClock.java
package com.im.wu.textviewremainpractice;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 java.util.Calendar;/** * Created by wu on 2016/3/15. */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();        }    }}

部分内容摘自()。

  • 可关注微信公众号(zhudekoudai 、smart_android)
  • QQ群号: 413589216
  • 专注Android分享:http://www.codernote.top/
0 0
原创粉丝点击