[转]android学习----基础UI编程(八)

  • 模拟/数字/线程小时钟设计
  • 动态输入日期与时间
  • 日期设置/时间设置对话框

21. 模拟/数字/线程小时钟设计

AnalogClock 与DigitalClock 的原理,以及线程时钟的实现 。

示例代码

① 新建工程
② 修改man.xml 布局,添加一个AnalogClock、一个DigitalClock、一个TextView
<TextView  //这个TextView 用来显示线程时钟
    android:id="@+id/TextView_showTime"
    android:layout_width="200px"
    android:layout_height="39px"
    android:textSize="25px"
    android:layout_x="82px"
    android:layout_y="222px">
</TextView>
<AnalogClock //模拟时钟
    android:id="@+id/Clock"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="82px"
    android:layout_y="34px">
</AnalogClock>
<DigitalClock //数字时钟
    android:id="@+id/DigitalClock01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="上午1:01"
    android:textSize="25px"
    android:layout_x="82px"
    android:layout_y="300px">
</DigitalClock>
<TextView
    android:id="@+id/widget46"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="模拟时钟"
    android:layout_x="11px"

android:layout_y="46px">
</TextView>
<TextView
    android:id="@+id/widget47"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="线程时钟"
    android:layout_x="11px"
    android:layout_y="228px">
</TextView>
<TextView
    android:id="@+id/widget48"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="数字时钟"
    android:layout_x="11px"
    android:layout_y="308px">
</TextView>

③ 模拟时钟的实现不需要额外代码,只需要UI 中添加,其自动显示时间

④ 数字时钟的实现也不需要额外代码,只需要UI 中添加,其自动显示时间

⑤ 而使用线程实现的TextView 时钟则需要线程Thread、Handler(发送、处理消息)辅助实现

import android.os.Handler;
import android.os.Message;
public class Clock extends Activity implements Runnable{
    public Handler myHandler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gh);
        myHandler = new Handler() {
            @Override

public void handleMessage(Message msg) {
                // TODO Auto-generated method stub
            }
        };
        Thread myT = new Thread(this);
        myT.start();
    }

@Override
    public void run() {
        // TODO Auto-generated method stub
    }
}

⑥ 修改mianActivity.java,实现线程控制,以及模拟/数字时钟的实现

package zyf.three.clock;
//导入要使用的包
import java.util.Calendar;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.AnalogClock;
import android.widget.DigitalClock;
import android.widget.TextView;

public class Clock extends Activity implements Runnable {
    // 定义要使用的类对象
    private TextView showTime; // 显示进程时钟的TextView
    AnalogClock myClock; // 模拟时钟
    DigitalClock myDigClock; // 数字时钟
    private final int msg_Key = 0x1234; // 发送的消息内容
    public Handler myHandler; // 发送、处理消息的类
    public Calendar myCalendar; // 日历类
    private int my_Hour, my_Minute, my_Second; // 时、分、秒
    private Thread myT;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        //导入主屏布局main.xml 
        setContentView(R.layout.gh);
        //从XML中获取模拟时钟UI对象

myClock = (AnalogClock) findViewById(R.id.Clock);
        //从XML中获取数字时钟UI对象
        myDigClock = (DigitalClock) findViewById(R.id.DigitalClock01);
        // 从XML中获取TextView UI对象
        showTime = (TextView) findViewById(R.id.TextView_showTime);

//通过Handler 来接收进程所传递的信息并更新TextView 
        myHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                // 这里是处理信息的方法
                // TODO Auto-generated method stub
                super.handleMessage(msg);
                switch (msg.what) {
                    case msg_Key:
                        // 在这处理要TextView对象Show时间的事件
                        showTime.setText(my_Hour + " : " + my_Minute + " : "+ my_Second);
                        break;
                    default:
                        break;
                }
            }
        };

// 通过进程来持续取得系统时间
        myT = new Thread(this);
        myT.start();
    }

// 实现一个Runable接口,实例化一个进程对象,用来持续取得系统时间
   @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
            do {
                //取得系统时间
                long Time = System.currentTimeMillis();
                myCalendar = Calendar.getInstance ();
                myCalendar.setTimeInMillis(Time);
                my_Hour = myCalendar.get(Calendar.HOUR);
                my_Minute = myCalendar.get(Calendar.MINUTE);
                my_Second = myCalendar.get(Calendar.SECOND);
                //让进程休息一秒
                Thread.sleep(1000);

//重要关键程序:取得时间后发出信息给Handler 
                Message msg = new Message();
                msg.what = msg_Key;
                myHandler.sendMessage(msg);
                //重要关键程序:取得时间后发出信息给Handler 
            } while (myT.interrupted() == false);
            //当系统发出中断信息时停止本循环
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

⑦ 结果

关键点

1. 模拟时钟 AnalogClock

不需要额外代码,只需要在UI中添加,其自动显示时间。

2. 数字时钟  DigitalClock

数字时钟,显示到秒,修正:分开显示小时/分钟/秒,均衡的字体不能够摆动显示。(译者注:根据字体按比例显示小时/分钟/秒,无法像AnalogClock转动显示)

3. 线程显示时间

1)如何启动一个线程

java中创建一个线程,有两种方式:继承 Thread类 与 实现Runnable接口 。

* 继承 Thread

Thread类里的run方法,就是线程执行内容方法。线程通过 .start()启动。

示例:

public calss threadA extends Thread

{

public threadA(){}

public void run (){ 线程执行内容 }

public static void main()

{

Thread testA = new threadA();

threadA.start();

}

}

* 实现 Runnable 接口

实现Runnable接口,在启动时也是需要根据这个runnable实例构造一个Thread实例进行start 。

示例:

public calss RunnableA implements Runnable

{

public RunnableA(){}

public void run (){ 线程执行内容 }

}

public class testThreadB()

{

RunnableA runA = new RunnableA();

Thread testB = new Thread(runA );

testB.start();

}

2)handle 类的消息处理

http://book.51cto.com/art/201010/231862.htm

http://wenku.baidu.com/view/c0359b20dd36a32d7375818e.html

http://wenku.baidu.com/view/0c4bac671ed9ad51f01df27a.html

3)System.currentTimeMillis

* System类:

System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。
      由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。

* System.currentTimeMillis()

Returns the current system time in milliseconds since January 1, 1970 00:00:00 UTC.

4)Calendar 日历类

22.动态输入日期与时间

DatePicker 与TimePicker 应用。

示例代码

① 新建工程
② 修改main.xml 布局,添加一个DatePicker、一个TimePicker、一个TextView

<DatePicker

android:id="@+id/my_DatePicker"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_x="10px"

android:layout_y="10px">

</DatePicker><!-- 日期设置器-->

<TimePicker

android:id="@+id/my_TimePicker"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_x="10px"

android:layout_y="150px">

</TimePicker><!-- 时间设置器-->

<TextView

android:id="@+id/my_TextView"

android:layout_width="228px"

android:layout_height="29px"

android:text="TextView"

android:layout_x="10px"

android:layout_y="300px">

</TextView>

③ DatePicker 的初始化与日期改变事件的处理

// 定义程序用到的UI元素对象:日历设置器

DatePicker my_datePicker;

//findViewById()从XML中获取UI元素对象

my_datePicker = (DatePicker) findViewById(R.id.my_DatePicker);

//为日历设置器添加点击事件监听器,处理设置日期事件

my_datePicker.init(my_Year, my_Month, my_Day,new DatePicker.OnDateChangedListener(){

@Override

    public void onDateChanged(DatePicker view, int year,

int monthOfYear, int dayOfMonth) {

// TODO Auto-generated method stub

//日期改变事件处理

}

});

④ TimePicker 的初始化与时间改变事件的处理

// 定义程序用到的UI元素对象:时间设置器

TimePicker my_timePicker;

// findViewById()从XML中获取UI元素对象

my_timePicker = (TimePicker) findViewById(R.id.my_TimePicker);

// 把时间设置成24小时制

my_timePicker.setIs24HourView(true);

//为时间设置器添加点击事件监听器,处理设置时间事件

my_timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener(){

@Override

      public void onTimeChanged(TimePicker view, int hourOfDay,int minute) {

// TODO Auto-generated method stub

//时间改变事件处理

}

});

⑤ 修改mainActivity.java,添加动态修改时间并显示效果

......

⑥ 结果

关键点 

23. 日期设置/时间设置 对话框

DatePickerDialog 与 TimePickerDialog 应用。

示例代码

① 新建工程
② 修改main.xml 布局,添加两个按钮、一个TextView

<Button

android:id="@+id/show_DatePicker"

android:layout_width="150px"

android:layout_height="wrap_content"

android:layout_x="10px"

android:layout_y="10px" android:text="显示日期设置对话框"/>

<Button

android:id="@+id/show_TimePicker"

android:layout_width="150px"

android:layout_height="wrap_content"

android:layout_x="10px"

android:layout_y="70px" android:text="显示时间设置对话框"/>

<TextView

android:id="@+id/my_TextView"

android:layout_width="228px"

android:text="TextView"

android:layout_x="10px"

android:layout_y="180px"

android:layout_height="45px"

android:textSize="20px"/>

③ DatePickerDialog 的定义与初始化以及显示

// 定义程序用到的UI元素对象:日历设置器对话框

DatePickerDialog my_datePickerDialog;

//构造一个DatePickerDialog对象,第一个参数为Context、

// 第二参数为日期修改事件处理监听器、后面为初始化的年月日

my_datePickerDialog=new DatePickerDialog(Ex_Ctrl_15_B.this,

myDateSetListener, my_Year, my_Month, my_Day);

//显示出日期设置对话框

my_datePickerDialog.show();

④ DatePickerDialog 的日期修改事件处理

//日期改变设置事件监听器

private OnDateSetListener myDateSetListener=new OnDateSetListener(){

@Override

public void onDateSet(DatePicker view, int year, int monthOfYear,

int dayOfMonth) {

// TODO Auto-generated method stub

//日期改变设置事件处理

}

};

⑤ TimePickerDialog 的定义与初始化以及显示

// 定义程序用到的UI元素对象:时间设置器对话框

TimePickerDialog my_timePickerDialog;

//构造一个TimePickerDialog对象,第一个参数为Context、

//第二个参数为时间修改事件监听器、后面两个为初始化时间,

//最后一个boolean类型设置是否为24小时制

my_timePickerDialog=new TimePickerDialog(Ex_Ctrl_15_B.this,

myTimeSetListener, my_Hour, my_Minute, false);

//显示出日期设置对话框

my_timePickerDialog.show();

⑥ TimePickerDialog 的时间修改事件处理

//时间改变设置事件监听器

private OnTimeSetListener myTimeSetListener=new OnTimeSetListener(){

@Override

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

// TODO Auto-generated method stub

//时间改变设置事件处理

}

};

⑦ 修改mainActivity.java,实现动态显示修改的日期、时间

......

⑧ 结果

时间: 2024-10-10 15:55:05

[转]android学习----基础UI编程(八)的相关文章

[转]android学习----基础UI编程(四)

CheckBox 的使用 RadioButton 的使用 12. CheckBox 的使用 1)通过只含有一个CheckBox的实例来学习CheckBox的使用 示例代码 ① 创建新工程② 在string.xml 中添加字符串 <?xml version="1.0" encoding="utf-8"?><resources><string name="app_name">Ex_Ctrl_4</string

[转]android学习----基础UI编程(六)

相簿浏览 Gallery 文件搜索引擎FileSearch 17. Gallery 与 衍生BaseAdapter 容器 Gallery控件,即Android的图片库控件. 需要定义一个BaseAdaper的子类(eg.ImageAdapter)来操作控制图片资源,然后在主类中通过Gallery.setAdapter(new ImageAdapter(this));来使用这个控制类. 示例代码 本例中 ImageView 和 Gallery 控件相互协作 . ① 新建项目 ② 定义layout

[转]android学习----基础UI编程(七)

自动完成输入框 AutoCompleteTextView 多内容自动完成输入框 19. AutoCompleteTextView 自动完成输入框 智能输入框 AutoCompleteTextView 1. 简介 一个可编辑的文本视图显示自动完成建议当用户键入.建议列表显示在一个下拉菜单,用户可以从中选择一项,以完成输入.建议列表是从一个数据适配器获取的数据. 2. 重要方法 clearListSelection():清除选中的列表项 dismissDropDown():如果存在关闭下拉菜单 ge

[转]android学习----基础UI编程(五)

相框设计 :ImageView 的堆叠作用 相框设计 :ImageButton 的堆叠作用 自定义下拉菜单 :Spinner 与setDropDownViewResource 动态添加╱删除的Spinner 菜单 : ArrayList 与Widget 的依赖性 14. 专业相框设计 1)ImageView 的堆叠应用 利用 ImageView 的堆叠,将上例中的实现不同相框的更换 示例代码 ① 新建工程② 准备三张png 图片 ③ 修改main.xml 布局,添加UI 元素 <?xml ver

[转]android学习----基础UI编程(三)

9. Toast--Android 专属浮动小提示 下例中,实现在一个EditView中输入一段话后,点击Button,Toast显示这段话. 示例代码: ① 新建工程② 在string.xml 中添加字符串 <?xml version="1.0" encoding="utf-8"?>    <resources>        <string name="app_name">EX_Ctrl_3</str

[转]android学习----基础UI编程(二)

7. TextView 和 EditView 共舞 预达到效果:在EditText中输入同时TextView进行输出 //前提:在main.xml中添加EditText 和 TextView控件 核心代码示例: public class EX_Ctrl_1 extends Activity {    private TextView mTextView01;    private EditText mEditText01;    // Called when the activity is fi

[转]android学习----基础UI编程(一)

1 通过 DisplayMetrics 类获取屏幕宽高 示例代码: package zyp.Activity; import android.app.Activity;import android.os.Bundle;import android.widget.*;import android.util.*; public class Test extends Activity {    //Called when the activity is first created. private T

[转]android学习----消息机制

一. 角色描述 1. Looper : 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列). 2. Handler : 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里:或者接收Looper(从Message Queue取出)所送来的消息. 3. Message Queue(消息队列) : 用来存放线程放入的消息. 4. 线程 :UI thread通常就是main thread,而Android启动程

[转]android学习总结----Activity view

什么是Activity? Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能. 它是 android 应用程序的基本功能单元. Activity 本身是没有界面的 什么是view/ viewGroups? view/ viewGroups :表示在 android 平台上的基本用户界面单元. view :为指定的屏幕矩形区域存储布局和内容.处理尺寸和布局,绘制,焦点改变,翻屏,按键 等… viewGroups:包含并管理下级系列的views 和 下级的 viewGroup