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
- Android基础知识之控件系列(4)——CheckedTextView、Chronometer、DigitalClock类
- 一步一步学android控件(之十一) —— Chronometer
- 05 - 基本控件:Clock时钟(AnalogClock、DigitalClock)、Chronometer计时器
- Android控件之Chronometer
- Android控件开发之DigitalClock
- Android控件开发之Chronometer
- Android控件之Chronometer(定时器)
- Android控件之Chronometer(定时器)
- Android控件开发之Chronometer
- Android控件之Chronometer(定时器)
- android学习笔记——Chronometer控件
- Android开发——Chronometer计时器控件
- Android AnalogClock TextClock DigitalClock Chronometer 时钟 定时器
- Android基础知识之控件系列(5)——EditText类及其子类
- Android控件之AnalogClock、DigitalClock探究
- Android控件之AnalogClock、DigitalClock calendar
- Android控件之AnalogClock、DigitalClock探究
- Android控件开发之Chronometer计时器
- java interface
- ffmpeg 时间戳问题汇总
- UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position xxx ordinal not in range(12
- Linux安装mysql——源码安装
- A1115. Counting Nodes in a BST (30)
- Android基础知识之控件系列(4)——CheckedTextView、Chronometer、DigitalClock类
- Extjs 打包 failed to find any files
- 最小二乘法
- ASM AMDU工具的使用
- 数据库SQL优化大总结之 百万级数据库优化方案
- CodeForces 650D Zip-line(最长上升子序列)
- SQL 优化原则
- Spring MVC之 注解
- 【ios】相册、定位等权限判断