首页 > 技术文章 > Android学习——DatePocker和TimePicker

guichun 2015-03-19 13:50 原文

DatePicker、TimePicker探究

  DatePicker继承自FrameLayout类,日期选择控件的主要功能是向用户提供包含年、月、日的日期数据并允许用户对其修改。如果要捕获用户修改日期选择控件中的数据事件,需要为DatePicker添加OnDateChangedListener监听器。

  TimePicker也继承自FrameLayout类。时间选择控件向用户显示一天中的时间(可以为24小时,也可以为AM/PM制),并允许用户进行选择。如果要捕获用户修改时间数据的事件,便需要为TimePicker添加OnTimeChangedListener监听器

一、DatePicker

基本概念:

DatePicker继承自FrameLayout类,日期选择控件的主要功能是向用户提供包含年、月、日的日期数据并允许用户对其修改。如果要捕获用户修改日期选择控件中的数据事件,需要为DatePicker添加OnDateChangedListener监听器。

重要方法:

getDayOfMonth():获取当前Day
getMonth():     获取当前月(注意:返回数值为0..11,需要自己+1来显示)
getYear()       获取当前年
updateDate(int year, int monthOfYear, int dayOfMonth):更新日
init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener)

参数
year             初始年(译者注:注意使用new Date()初始化年时,需要+1900,如下:date.getYear() + 1900)
monthOfYear         初始月。
dayOfMonth         初始日。
onDateChangedListener   日期改变时通知用户的事件监听,可以为空(null)。

效果图:

参考代码:

  (1)main.xml源码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btnSet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:text="I am all set!" />

    <DatePicker
        android:id="@+id/datePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TimePicker
        android:id="@+id/timePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
main.xml

 

  (2) 按F11键在Android模拟器上调试应用程序。图4-15显示了DatePicker视图(需要按Ctrl+F11组合键将模拟器的方向改为横向;纵向太窄,不能很好地显示DatePicker)。

 

  (3) 返回Eclipse,在BasicViews4Activity.java文件中添加下列粗体显示的语句:

package net.learn2develop.BasicViews4;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TimePicker;
import android.widget.Toast;

public class BasicViews4Activity extends Activity {
      TimePicker timePicker;
      DatePicker datePicker;
    
      int hour, minute;
      static final int TIME_DIALOG_ID = 0;

     /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main);

          timePicker = (TimePicker) findViewById(R.id.timePicker);
           timePicker.setIs24HourView(true);
        
           // showDialog(TIME_DIALOG_ID);
           datePicker = (DatePicker) findViewById(R.id.datePicker);       
      }

     @Override
     protected Dialog onCreateDialog(int id)
      {
           switch (id) {
           case TIME_DIALOG_ID:
                return new TimePickerDialog(
                          this, mTimeSetListener, hour, minute, false);
           }
           return null;
      }

    private TimePickerDialog.OnTimeSetListener mTimeSetListener =
     new TimePickerDialog.OnTimeSetListener()
     {
         public void onTimeSet(
                    TimePicker view, int hourOfDay, int minuteOfHour)
          {
               hour = hourOfDay;
               minute = minuteOfHour;
            
               SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm aa");
               Date date = new Date(0,0,0, hour, minute);
               String strDate = timeFormat.format(date);
            
               Toast.makeText(getBaseContext(),
                         "You have selected " + strDate,
                         Toast.LENGTH_SHORT).show();           
          }
     };
    public void onClick(View view) {
          Toast.makeText(getBaseContext(),
                    "Date selected:" + (datePicker.getMonth() + 1) +
                    "/" + datePicker.getDayOfMonth() +
                    "/" + datePicker.getYear() + "\n" +
                    "Time selected:" + timePicker.getCurrentHour() +
                    ":" + timePicker.getCurrentMinute(),
                    Toast.LENGTH_SHORT).show();
     }
}
BasicViews4Activity.java

  (4) 按F11键在Android模拟器上调试应用程序。一旦设置了日期,单击Button将显示设置的日期,如图4-16所示。


 示例说明:

  通过调用getMonth()、getDayOfMonth()和getYear()方法来分别获取月份、日子和年份:
"Date selected:" + (datePicker.getMonth() + 1) +
                "/" + datePicker.getDayOfMonth() +
                "/" + datePicker.getYear() + "\n" +

  注意,getMonth()方法返回0代表一月、返回1代表二月,依次类推。因此,需要将此方法返回的结果加1来获得对应的月份数。

 

使用对话框显示DatePicker视图

  (1) 使用前述“试一试”中创建的BasicViews4项目,在BasicViews4Activity.java文件中添加下列粗体显示的语句:

package net.learn2develop.BasicViews4;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TimePicker;
import android.widget.Toast;

public class BasicViews4Activity extends Activity {
      TimePicker timePicker;
      DatePicker datePicker;

      int hour, minute;
      int yr, month, day;

      static final int TIME_DIALOG_ID = 0;
      static final int DATE_DIALOG_ID = 1;

     /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main);

          timePicker = (TimePicker) findViewById(R.id.timePicker);
           timePicker.setIs24HourView(true);

          // showDialog(TIME_DIALOG_ID);
           datePicker = (DatePicker) findViewById(R.id.datePicker);

        //---get the current date---
           Calendar today = Calendar.getInstance();
           yr = today.get(Calendar.YEAR);
           month = today.get(Calendar.MONTH);
           day = today.get(Calendar.DAY_OF_MONTH);

          showDialog(DATE_DIALOG_ID);       
      }

     @Override
      protected Dialog onCreateDialog(int id)
      {
           switch (id) {
           case TIME_DIALOG_ID:
                return new TimePickerDialog(
                          this, mTimeSetListener, hour, minute, false);
         case DATE_DIALOG_ID:
                return new DatePickerDialog(
                          this, mDateSetListener, yr, month, day);
           }
                return null;
      }

    private DatePickerDialog.OnDateSetListener mDateSetListener =
      new DatePickerDialog.OnDateSetListener()
      {
           public void onDateSet(
 DatePicker view, int year, int monthOfYear, int dayOfMonth)
           {
                yr = year;
                month = monthOfYear;
                day = dayOfMonth;
                Toast.makeText(getBaseContext(),
                          "You have selected : " + (month + 1) +
                          "/" + day + "/" + year,
                     Toast.LENGTH_SHORT).show();
           }
      };

     private TimePickerDialog.OnTimeSetListener mTimeSetListener =
      new TimePickerDialog.OnTimeSetListener()
      {
           public void onTimeSet(
                     TimePicker view, int hourOfDay, int minuteOfHour)
           {
                hour = hourOfDay;
                minute = minuteOfHour;

               SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm aa");
                Date date = new Date(0,0,0, hour, minute);
                String strDate = timeFormat.format(date);

               Toast.makeText(getBaseContext(),
                         "You have selected " + strDate,
                         Toast.LENGTH_SHORT).show();           
         }
     };

    public void onClick(View view) {
         Toast.makeText(getBaseContext(),
                   "Date selected:" + (datePicker.getMonth() + 1) +
                   "/" + datePicker.getDayOfMonth() +
                   "/" + datePicker.getYear() + "\n" +
                   "Time selected:" + timePicker.getCurrentHour() +
                   ":" + timePicker.getCurrentMinute(),
                   Toast.LENGTH_SHORT).show();
     }
}
BasicViews4Activity.java

  (2) 按F11键在Android模拟器上调试应用程序。当活动加载时,可以看到DatePicker显示在一个对话框窗口中(如图4-17所示)。设定好一个日期并单击Set按钮。Toast窗口将显示出您刚刚设置好的日期。

示例说明

  DatePicker和TimePicker的工作原理是一致的。当设置日期时,它将触发onDateSet()方法,从中可以获取由用户设定的日期:

public void onDateSet(
                 DatePicker view, int year, int monthOfYear, int dayOfMonth)
         {
             yr = year;
             month = monthOfYear;
             day = dayOfMonth;
             Toast.makeText(getBaseContext(),
                     "You have selected : " + (month + 1) +
                     "/" + day + "/" + year,
                     Toast.LENGTH_SHORT).show();
         }

注意,在显示对话框之前,需要初始化3个变量—yr、month和day:

  //---get the current date---
     Calendar today = Calendar.getInstance();
      yr = today.get(Calendar.YEAR);
      month = today.get(Calendar.MONTH);
      day = today.get(Calendar.DAY_OF_MONTH);

     showDialog(DATE_DIALOG_ID);       

如果不这样做,当在运行时创建一个DatePickerDialog类的实例时,将发生非法参数异常(current should be >= start and <= end)。

 

 

二、TimePicker

基本概念:

  TimePicker也继承自FrameLayout类。时间选择控件向用户显示一天中的时间(可以为24小时,也可以为AM/PM制),并允许用户进行选择。如果要捕获用户修改时间数据的事件,便需要为TimePicker添加OnTimeChangedListener监听器

  用于选择一天中时间的视图,支持 24小时及上午/下午模式。小时,分钟及上午/下午(如果可用)都可以用垂直滚动条来控制。用键盘来输入小时。两个数的小时数可以通过输入两个数字来实现,例如在一定时间内输入‘1’和‘2’即选择了12点。分钟能显示输入的单个数字。在AM/PM模式下,用户可以输入'a', 'A"或 'p', 'P'来选取。对于对话框视图,参见TimePickerDialog

重要方法:

setCurrentMinute(Integer currentMinute) 设置当前时间的分钟
getCurrentMinute()                      获取当前时间的分钟
setEnabled(boolean enabled)             设置当前视图是否可以编辑。
m_TimePicker.setIs24HourView(true);     设置为24小时制显示
setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener)当时间改变时调用

实例:

timePicker = (TimePicker)findViewById(R.id.timePicker);
timePicker.setCurrentHour(16);
timePicker.setCurrentMinute(10);
updateDisplay(16,10);
timePicker.setOnTimeChangedListener(this);

效果图:

 

公共方法:

 三、公共方法




         public int getBaseline ()

         返回窗口空间的文本基准线到其顶边界的偏移量。如果这个部件不支持基准线对齐,这个方法返回-1/。

                   返回值

  基准线的偏移量,如果不支持基准线对齐则返回-1public Integer getCurrentHour ()

         获取当前时间的小时部分。

                   返回值

                            当前小时(0-23public Integer getCurrentMinute ()

         获取当前时间的分钟部分。

                   返回值

                            当前分钟。

 

         public boolean is24HourView ()

         获取当前系统设置是否是24小时制。

                   返回值

                            如果是24小时制返回true,否则返回false。

 

         public void setCurrentHour (Integer currentHour)

      设置当前小时。

 

         public void setCurrentMinute (Integer currentMinute)

         设置当前分钟(0-59)。

 

         public void setEnabled (boolean enabled)

      设置可用的视图状态。可用的视图状态的解释在子类中改变。

                   参数

                            enabled 如果可用为true,否则为false。 

 

         public void setIs24HourView (Boolean is24HourView)

      设置是24小时还是上午/下午制。

                   参数

                            is24HourView     True表示 24小时制. False表示上午/下午制.

 

         public void setOnTimeChangedListener (TimePicker.OnTimeChangedListener onTimeChangedListener)

         设置时间调整事件的回调函数。

                   参数
                              onTimeChangedListener          回调函数,不能为空。 
 
公共方法参考

受保护方法:

 protected void onRestoreInstanceState (Parcelable state)

         允许一个视图回复到之前用onSaveInstanceState()保存的状态,state参数不能为空。

                   参数

                            state     之前调用onSaveInstanceState()返回的状态。

 

         protected Parcelable onSaveInstanceState ()

         用来允许一个视图保存当前的内部状态,之后可以创建新的实例应用相同的状态。状态信息不能包含常量或在之后重新构造。例如,你永远不能保存在屏幕上的当前位置,因为当创建一个新的视图时,它将会被放置到它的层次结构中,它的位置会被重新计算。

         你可以存储到这里的一些例子:一个文本框中当前光标的位置(但通常不是文字本身,文字通常保存在内容提供者(content provider)或其他持久的储存中),一个列表视图中的当前选中项。

                   返回值
                       返回一个包含视图当前状态的Parcelable对象,或没有什么状态保存时返回null。默认实现返回null。 
protected举例

参考代码:

  (1) 打开Eclipse,创建一个名为BasicViews4的Android项目。

  (2) 修改位于res/layout文件夹下的main.xml文件,添加下列粗体显示的行:

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical" >

<TimePicker android:id="@+id/timePicker"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" />

<Button android:id="@+id/btnSet"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="I am all set!"
      android:onClick="onClick" />

</LinearLayout>
main.xml

  (3) 在Eclipse中选择该项目的名称并按F11键在Android模拟器中调试应用程序。图4-12显示了运用中的TimePicker。除了单击加(+)和减(—)按钮外,还可以使用设备上的数字键盘来修改小时和分钟,单击AM按钮在AM和PM之间切换。

  (4) 返回Eclipse,在BasicViews4Activity.java文件中添加下列粗体显示的语句:
package net.learn2develop.BasicViews4;

package net.learn2develop.BasicViews4;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TimePicker;
import android.widget.Toast;

public class BasicViews4Activity extends Activity {
      TimePicker timePicker;
    
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main);
        
           timePicker = (TimePicker) findViewById(R.id.timePicker);
           timePicker.setIs24HourView(true);
      }
    
      public void onClick(View view) {
           Toast.makeText(getBaseContext(),
                    "Time selected:" +
                    timePicker.getCurrentHour() +
                    ":" + timePicker.getCurrentMinute(),
                    Toast.LENGTH_SHORT).show();
      }
    
 }
BasicViews4Activity.java

  (5) 按F11键在Android模拟器上调试应用程序。这一次,TimePicker将以24小时格式显示。单击Button将显示您在TimePicker中设置好的时间(如图4-13所示)。

示例说明

  TimePicker显示了一个可以让用户设置时间的标准用户界面。默认情况下,它以AM/PM格式显示时间。如果想要以24小时格式来显示,可以使用setIs24HourView()方法。

  为了以编程方式获得用户设置的时间,可以使用getCurrentHour()和getCurrentMinute()方法:
Toast.makeText(getBaseContext(),
          "Time selected:" +
          timePicker.getCurrentHour() +
          ":" + timePicker.getCurrent
Minute(),
          Toast.LENGTH_SHORT).show();

  注意:getCurrentHour()方法总是返回24小时格式的时间,也就是返回一个0~23之间的值。

  虽然可以在一个活动中显示TimePicker,但更好的方法是在一个对话框窗口中显示它。这样一旦设置好时间,TimePicker就会消失,不再占据活动中的任何空间。下面的“试一试”展示了如何做到这一点。

使用对话框显示TimePicker视图:

  (1) 所创建的BasicViews4项目,按如下所示修改

package net.learn2develop.BasicViews4;

import java.text.SimpleDateFormat;
 import java.util.Date;

import android.app.Activity;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.TimePicker;
import android.widget.Toast;

public class BasicViews4Activity extends Activity {
      TimePicker timePicker;

     int hour, minute;
      static final int TIME_DIALOG_ID = 0;

     /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main);

          timePicker = (TimePicker) findViewById(R.id.timePicker);
           timePicker.setIs24HourView(true);
        
           showDialog(TIME_DIALOG_ID);
      }

     @Override
      protected Dialog onCreateDialog(int id)
      {
           switch (id) {
           case TIME_DIALOG_ID:
                return new TimePickerDialog(
                        this, mTimeSetListener, hour, minute, false);
           }
           return null;
     }

    private TimePickerDialog.OnTimeSetListener mTimeSetListener =
     new TimePickerDialog.OnTimeSetListener()
     {
          public void onTimeSet(
                  TimePicker view, int hourOfDay, int minuteOfHour)
          {
               hour = hourOfDay;
               minute = minuteOfHour;
            
               SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm aa");
               Date date = new Date(0,0,0, hour, minute);
               String strDate = timeFormat.format(date);
            
               Toast.makeText(getBaseContext(),
                        "You have selected " + strDate,
                        Toast.LENGTH_SHORT).show();           
          }
     };

    public void onClick(View view) {
          Toast.makeText(getBaseContext(),
                    "Time selected:" +
                           timePicker.getCurrentHour() +
                            ":" + timePicker.getCurrentMinute(),
                           Toast.LENGTH_SHORT).show();
     }  

}
BasicViews4Activity.java

  (2) 按F11键在Android模拟器中调试应用程序。当活动被加载时,可以看到TimePicker显示在一个对话框窗口内(如图4-14所示)。设置一个时间,然后单击Set按钮,将看到Toast窗口显示了您刚刚设置好的时间。

示例说明

  为了显示一个对话框窗口,可以使用showDialog()方法,传入一个ID来标识对话框的源:
     showDialog(TIME_DIALOG_ID);
  当调用showDialog()方法时,onCreateDialog()方法将被调用:

@Override
     protected Dialog onCreateDialog(int id)
     {
          switch (id) {
          case TIME_DIALOG_ID:
               return new TimePickerDialog(
                        this, mTimeSetListener, hour, minute, false);
          }
          return null;
     }

  这里,创建了一个TimePickerDialog类的新实例,给它传递了当前上下文、回调函数、初始的小时和分钟,以及TimePicker是否以24小时格式显示。

  当用户单击TimePicker对话框窗口中的Set按钮时,将调用onTimeSet()方法:

private TimePickerDialog.OnTimeSetListener mTimeSetListener =
     new TimePickerDialog.OnTimeSetListener()
     {
          public void onTimeSet(
                    TimePicker view, int hourOfDay, int minuteOfHour)
          {
               hour = hourOfDay;
               minute = minuteOfHour;
            
               SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm aa");
               Date date = new Date(0,0,0, hour, minute);
               String strDate = timeFormat.format(date);
            
               Toast.makeText(getBaseContext(),
                        "You have selected " + strDate,
                        Toast.LENGTH_SHORT).show();           
           }
     };

  这里,onTimeSet()方法将包含用户分别通过hourOfDay和minuteOfHour参数设置的小时和分钟。

 

DatePicker和TimePicker的应用

模拟日期与时间选择控件的用法

目录结构:

 

main.xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <DatePicker android:id="@+id/datePicker" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/>
    <EditText android:id="@+id/dateEt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:cursorVisible="false"
        android:editable="false"/>
    <TimePicker android:id="@+id/timePicker" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/>
    <EditText android:id="@+id/timeEt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:cursorVisible="false"
        android:editable="false"/>
</LinearLayout>
main.xml

DpTpActivity类

package com.ljq.activity;

import java.util.Calendar;

import android.app.Activity;
import android.os.Bundle;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.TimePicker.OnTimeChangedListener;

public class DpTpActivity extends Activity {
    private EditText dateEt=null;
    private EditText timeEt=null;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        dateEt=(EditText)findViewById(R.id.dateEt);
        timeEt=(EditText)findViewById(R.id.timeEt);
        DatePicker datePicker=(DatePicker)findViewById(R.id.datePicker);
        TimePicker timePicker=(TimePicker)findViewById(R.id.timePicker);
        
        Calendar calendar=Calendar.getInstance();
        int year=calendar.get(Calendar.YEAR);
        int monthOfYear=calendar.get(Calendar.MONTH);
        int dayOfMonth=calendar.get(Calendar.DAY_OF_MONTH);
        datePicker.init(year, monthOfYear, dayOfMonth, new OnDateChangedListener(){

            public void onDateChanged(DatePicker view, int year,
                    int monthOfYear, int dayOfMonth) {
                dateEt.setText("您选择的日期是:"+year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日。");
            }
            
        });
        
        timePicker.setOnTimeChangedListener(new OnTimeChangedListener(){

            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                timeEt.setText("您选择的时间是:"+hourOfDay+"时"+minute+"分。");
            }
            
        });
    }
}
DpTpActivity

运行结果:

 

使用对话框显示日期、时间视图

效果图:

main.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/dateText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <Button 
        android:id="@+id/dateButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="设置日期"
        />
    <TextView
        android:id="@+id/timeText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <Button 
        android:id="@+id/timeButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="设置时间"
        />
    
</LinearLayout>
main.xml
TextAndridActivity.java类
package com.tiantian.test;

import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
import android.widget.ZoomControls;

public class TextAndridActivity extends Activity {
    /** Called when the activity is first created. */
    private TextView dateText;
    private TextView timeText;
    private Button dateButton;
    private Button timeButton;
    
    private int year;
    private int monthOfYear;
    private int dayOfMonth;
    private int hour;
    private int minute;
    //声明一个独一无二的标识,来作为要显示DatePicker的Dialog的ID
    final static int DATE_DIALOG_ID = 1;
    //声明一个独一无二的标识,来作为要显示TimePicker的Dialog的ID
    final static int TIME_DIALOG_ID = 2;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        dateText = (TextView) findViewById(R.id.dateText);
        timeText = (TextView) findViewById(R.id.timeText);
        dateButton = (Button) findViewById(R.id.dateButton);
        dateButton.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                //调用Activity类的方法来显示Dialog:调用这个方法会允许Activity管理该Dialog的生命周期,  
//并会调用 onCreateDialog(int)回调函数来请求一个Dialog
                showDialog(DATE_DIALOG_ID);
            }
        });
        timeButton = (Button) findViewById(R.id.timeButton);
        timeButton.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                //调用Activity类的方法来显示Dialog:调用这个方法会允许Activity管理该Dialog的生命周期,  
//并会调用 onCreateDialog(int)回调函数来请求一个Dialog
                showDialog(TIME_DIALOG_ID);
            }
        });
        //得到当前日期和时间(作为初始值)
        Calendar calendar = Calendar.getInstance();
        year = calendar.get(Calendar.YEAR);
        monthOfYear = calendar.get(Calendar.MONTH);
        dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
        hour = calendar.get(Calendar.HOUR_OF_DAY);
        minute = calendar.get(Calendar.MINUTE);
        
    }
    
    //当Activity调用showDialog函数时会触发该函数的调用:
    @Override
    protected Dialog onCreateDialog(int id) {
        // TODO Auto-generated method stub
        switch(id){
        case DATE_DIALOG_ID:
            return new DatePickerDialog(this, new OnDateSetListener() {
                
                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear,
                        int dayOfMonth) {
                    // TODO Auto-generated method stub
                    dateText.setText(year + "年" + (monthOfYear + 1) + "月" + dayOfMonth + "日");
                }
            }, year, monthOfYear, dayOfMonth);
        case TIME_DIALOG_ID:
            return new TimePickerDialog(this, new OnTimeSetListener() {
                
                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    // TODO Auto-generated method stub
                    timeText.setText(hourOfDay + "时" + minute + "分");
                }
            }, hour, minute, true);
        }
        return null;
    }
    
    
    
}
TextAndridActivity.java

 

java类

推荐阅读