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

相关文章
|
6月前
|
缓存 安全 数据库
Android学习笔记4
Android学习笔记4
25 0
|
6月前
|
XML 数据库 数据安全/隐私保护
Android学习笔记3
Android学习笔记3
114 0
|
6月前
|
XML Java Android开发
Android学习笔记2
Android学习笔记2
52 0
|
6月前
|
XML Java Linux
Android学习笔记1
Android学习笔记1
31 0
|
8月前
|
存储 Java API
Android逆向 | 基础篇 - Java 学习笔记03
Android逆向 | 基础篇 - Java 学习笔记03
|
8月前
|
Java 编译器 Android开发
Android逆向 | 基础篇 - Java 学习笔记02
Android逆向 | 基础篇 - Java 学习笔记02
|
8月前
|
Java 编译器 Android开发
Android逆向 | 基础篇 - Java 学习笔记01
Android逆向 | 基础篇 - Java 学习笔记01
|
Java 开发工具 Android开发
Android中的Binder学习笔记
Android中的Binder学习笔记
Android中的Binder学习笔记
|
JSON 前端开发 Java
Java WEB 与 android | 学习笔记
快速学习 Java WEB 与 android。
Java WEB 与 android | 学习笔记
|
Web App开发 小程序 安全
mPaaS 小程序介绍+接入 mPaaS 小程序并实现启动 Android 版(二)| 学习笔记
快速学习 mPaaS 小程序介绍+接入 mPaaS 小程序并实现启动 Android 版。
651 0
mPaaS 小程序介绍+接入 mPaaS 小程序并实现启动 Android 版(二)| 学习笔记