码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-06-11 18:54:14      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

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

 

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_Yearmy_Monthmy_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,

myDateSetListenermy_Yearmy_Monthmy_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,

myTimeSetListenermy_Hourmy_Minutefalse);

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

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,实现动态显示修改的日期、时间

......

 

⑧ 结果

技术分享

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

标签:

原文地址:http://www.cnblogs.com/wj033/p/4569720.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!