Android学习笔记(四)时钟、时间

AnalogClock实现时钟

 



  android.os.Handle、java.lang.Thread以及android.os.Message三对象的整合实现。

  通过生成一个Thread,在进程内调用System.currentTimeMillis()取得系统时间,并通过Message对象来通知Handler对象,Handler作为联系Activity与Thread之间的桥梁。

package com.example.test15;

import java.util.Calendar;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.widget.AnalogClock;
import android.widget.TextView;

public class MainActivity extends Activity {

    protected static final int GUINOTIFIER=0x1234;

    private TextView mTextView;
    public AnalogClock mAnalogClock;

    public Calendar mCalendar;
    public int mMinutes;
    public int mHour;
    public int mSecond;

    public Handler mHandler;
    private Thread mClockThread;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView=(TextView)findViewById(R.id.textView1);
        mAnalogClock=(AnalogClock)findViewById(R.id.analogClock1);

        //Handler来接收运行线程所需要传递的信息
        mHandler=new Handler(){
            public void handleMessage(Message msg){
                switch(msg.what){
                case MainActivity.GUINOTIFIER:
                    mTextView.setText(mHour+":"+mMinutes+":"+mSecond);
                    break;
                }
                super.handleMessage(msg);
            }
        };

        mClockThread = new LooperThread();
        mClockThread.start();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    class LooperThread extends Thread{
        public void run(){
            super.run();
            try{
                do{
                    long time = System.currentTimeMillis();
                    final Calendar mCalendar=Calendar.getInstance();
                    mCalendar.setTimeInMillis(time);
                    mHour=mCalendar.get(Calendar.HOUR);
                    mMinutes=mCalendar.get(Calendar.MINUTE);
                    mSecond=mCalendar.get(mCalendar.SECOND);

                    //Thread.sleep(3000);

                    Message m=new Message();
                    m.what=MainActivity.GUINOTIFIER;
                    MainActivity.this.mHandler.sendMessage(m);

                }while(MainActivity.LooperThread.interrupted()==false);
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
}

 

DatePicker和TimePicker实现时间选择



  日期选择组件DatePicker 和 时间选择组件TimePicker。

  首先通过,Calendar c=Calendar.getInstance();获取系统时间和日期。

  再利用DatePicker.init()来更新日期,利用TimePicker.setOnTimeChangedListerner()来监听时间的修改(这里可以通过TimePicker.setIs24HourView来设置时间是否为24格式)。

package com.example.test16;

import java.text.Format;
import java.util.Calendar;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
import android.support.v4.app.NavUtils;

public class MainActivity extends Activity {

    private TextView mTextView;
    TimePicker mTimePicker;
    DatePicker mDatePicker;

    private int mYear;
    private int mMonth;
    private int mDay;
    private int mHour;
    private int mMinute;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getDateTime();
        mTextView=(TextView)findViewById(R.id.textView1);
        updateDisplay();

        mDatePicker=(DatePicker)findViewById(R.id.datePicker1);
        mDatePicker.init(mYear, mMonth, mDay, new DatePicker.OnDateChangedListener() {

            public void onDateChanged(DatePicker view, int year, int monthOfYear,
                    int dayOfMonth) {
                // TODO Auto-generated method stub
                mYear=year;
                mMonth=monthOfYear;
                mDay=dayOfMonth;

                updateDisplay();
            }
        });

        mTimePicker=(TimePicker)findViewById(R.id.timePicker1);
        mTimePicker.setIs24HourView(true);
        mTimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {

            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                // TODO Auto-generated method stub
                mHour=hourOfDay;
                mMinute=minute;

                updateDisplay();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void getDateTime(){
        Calendar c=Calendar.getInstance();
        mYear=c.get(Calendar.YEAR);
        mMonth=c.get(Calendar.MONTH);
        mDay=c.get(Calendar.DAY_OF_MONTH);
        mHour=c.get(Calendar.HOUR_OF_DAY);
        mMinute=c.get(Calendar.MINUTE);
    }

    private void updateDisplay(){
        mTextView.setText(
                new StringBuilder().append(mYear).append("/").append(format(mMonth+1)).append("/").append(format(mDay)).append("  ")
                    .append(format(mHour)).append(":").append(format(mMinute))
                );
    }
    //int to string
    private String format(int x){
        String s=""+x;
        if(s.length()==1)
            s="0"+s;
        return s;
    }
}

 

 


本文 由 cococo点点 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:cococo点点 http://www.cnblogs.com/coder2012

时间: 2024-08-16 14:43:27

Android学习笔记(四)时钟、时间的相关文章

Android学习笔记(20):时钟(AnalogClock和TextClock)和计时器(Chronometer)

时钟文本TextClock继承自TextView,是用于显示当前时间的文本框. TextClock支持的XML属性和相关方法   XML属性 相关方法 说明 android:format12Hour setFormat12Hour(CharSequence) 设置12小时制的格式字符串 android:format24Hour setFormat12Hour(CharSequence) 设置24小时制的格式字符串 android:timeZone setTimeZone(String) 设置该时

kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1290269 KVM虚拟化学习笔记系列文章列表 ---------------------------------------- kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51cto.com/703525/1288795 kvm虚拟化学习笔记(二)之linux kvm虚拟机安装 h

Android学习笔记之应用单元测试实例分析_Android

本文实例讲述了Android学习笔记之应用单元测试.分享给大家供大家参考,具体如下: 第一步:在AndroidManifest.xml中加入如下两段代码: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.pccw" android:versionCode="1" android:versionName="1.0&qu

Android学习笔记之应用单元测试实例分析

本文实例讲述了Android学习笔记之应用单元测试.分享给大家供大家参考,具体如下: 第一步:在AndroidManifest.xml中加入如下两段代码: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.pccw" android:versionCode="1" android:versionName="1.0&qu

Android学习笔记45之gson解析json_Android

JSON即JavaScript Object Natation, 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing

Android学习笔记(二)App工程文件分析_Android

App工程文件分析 关于如何创建一个最简单的Android App请参照链接: < Android学习笔记(一)环境安装及第一个hello world > http://www.jb51.net/article/52593.htm 创建完的工程文件如下图所示,本文对一些主要的文件进行分析. src文件分析 App源文件如图: 打开源文件 MainActivity.java 可看到如下代码: 源码主要功能如下: App源文件目录 package com.example.firstapp; 导入A

Android学习笔记45之gson解析json

JSON即JavaScript Object Natation, 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing

Sqlite学习笔记(四)&amp;&amp;SQLite-WAL原理(转)

Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是什么       WAL(Write ahead logging)是一种日志模式,它是一种思想,普遍应用于关系型数据库.每个事务执行变更时,修改数据页,同时会产生日志,这样在事务提交后,不需要将修改的脏页刷盘,只需要将事务产生的日志落盘即可返回.WAL保证日志一定先于对应的脏页落盘,就是所谓的WAL.SQLI

Caliburn.Micro学习笔记(四)----IHandle&lt;T&gt;实现多语言功能

Caliburn.Micro学习笔记目录 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小demo给大家提供一个思路 先看一下效果                                           点击英文  变成英文状态点chinese就会变成中文                         源码的下载地址在文章的最下