更多精彩内容,请点击阅读:《API Demos 2.3 学习笔记》
下面我们简单介绍下这四种控件的调用方法:
1、DatePickerDialog
// 日期和时间相关定义数据 private int mYear; private int mMonth; private int mDay; private int mHour; private int mMinute; // 通过java类Calendar获得系统当前时间数据信息 final 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); // 创建日期选择对话框 DatePickerDialog mDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mYear = year; mMonth = monthOfYear; mDay = dayOfMonth; /*这里放更新日期的方法*/ } }, mYear, mMonth, mDay); mDatePickerDialog.show();注:创建 DatePickerDialog时,5个参数以及它们对应的含义如下:
context: 对话框的上下文环境context
callBack: 对话框监听器 DatePickerDialog.OnDateSetListener
Year: 对话框创建时显示的初始年份
MonthOfYear:对话框创建时显示的初始月份
DayOfMonth:对话框创建时显示的初始日期
2、TimePickerDialog
// 日期和时间相关定义数据 private int mYear; private int mMonth; private int mDay; private int mHour; private int mMinute; // 通过java类Calendar获得系统当前时间数据信息 final 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); // 创建时间选择对话框 TimePickerDialog mTimePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() { public void onTimeSet(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; mMinute = minute; /*这里放更新时间的方法*/ } }, mHour, mMinute,true); mTimePickerDialog.show();注: 创建 TimePickerDialog时,5个参数以及它们对应的含义如下:
context: 对话框的上下文环境context
callBack: 对话框监听器TimePickerDialog.OnTimeSetListener
hourOfDay: 对话框创建时显示的初始小时
minute:对话框创建时显示的初始分钟
is24HourView: 是否显示24小时制视图。true则显示,否则显示12小时制视图
3、DatePicker
// 日期和时间相关定义数据 private int mYear; private int mMonth; private int mDay; private int mHour; private int mMinute; // 通过java类Calendar获得系统当前时间数据信息 final 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); // 通过findViewById方法获得一个DatePicker对象 DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker); datePicker.init(mYear, mMonth, mDay, new DatePicker.OnDateChangedListener(){ public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mYear = year; mMonth = monthOfYear; mDay = dayOfMonth; /*这里放更新日期的方法*/ } });
注:创建 DatePicker 时,需要注意的是,使用的是方法是init(),这与其他三个控件创建方法不一样,切忌混淆。4个参数以及它们对应的含义如下:
Year: DatePicker 创建时显示的初始年份
MonthOfYear: DatePicker 创建时显示的初始月份
DayOfMonth: DatePicker 创建时显示的初始日期
callBack: 监听器 DatePicker.OnDateChangedListener
// 日期和时间相关定义数据 private int mYear; private int mMonth; private int mDay; private int mHour; private int mMinute; // 通过java类Calendar获得系统当前时间数据信息 final 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); // 通过findViewById方法获得一个TimePicker对象 TimePicker timePicker = (TimePicker) findViewById(R.id.timePicker); timePicker.setIs24HourView(true); //参数is24HourView,如果是true,则为24小时制,否则,则为12小时制。 timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() { public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; mMinute = minute; /*这里放更新时间的方法*/ } });
下面我们进行实例代码解析:
实例一:DateWidgets1
res-value-string.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="date_widgets_example_dateDisplay_text"></string> <string name="date_widgets_example_pickTime_text">change the time</string> <string name="date_widgets_example_pickDate_text">change the date</string> </resources>
res-layout-date_widgets_example_1.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <!-- 日期和时间显示区 --> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/dateDisplay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/date_widgets_example_dateDisplay_text"/> </LinearLayout> <!-- 按钮一,点击弹出日期选择对话框 --> <Button android:id="@+id/pickDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/date_widgets_example_pickDate_text"/> <!-- 按钮二,点击弹出时间选择对话框 --> <Button android:id="@+id/pickTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/date_widgets_example_pickTime_text"/> </LinearLayout>
src-com.example.android.apis.view-DateWidgets1.java
package com.example.android.apis.view; import com.example.android.apis.R; import android.app.Activity; import android.app.DatePickerDialog; import android.app.TimePickerDialog; import android.app.Dialog; import android.os.Bundle; import android.widget.TextView; import android.widget.Button; import android.widget.DatePicker; import android.widget.TimePicker; import android.view.View; import java.util.Calendar; public class DateWidgets1 extends Activity { // 日期和时间显示区域 private TextView mDateDisplay; // 日期和时间相关定义数据 private int mYear; private int mMonth; private int mDay; private int mHour; private int mMinute; // 对话框标示,用于创建对话框时进行区分 static final int TIME_DIALOG_ID = 0; static final int DATE_DIALOG_ID = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.date_widgets_example_1); // 通过findViewById方法获得一个TextView对象 mDateDisplay = (TextView) findViewById(R.id.dateDisplay); // 通过findViewById方法获得一个Button对象:pickDate,并设置监听器。 Button pickDate = (Button) findViewById(R.id.pickDate); pickDate.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { showDialog(DATE_DIALOG_ID); // 点击按钮时,触发响应,创建或者显示日期选择对话框 } }); // 通过findViewById方法获得一个Button对象:pickTime,并设置监听器。 Button pickTime = (Button) findViewById(R.id.pickTime); pickTime.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { showDialog(TIME_DIALOG_ID); // 点击按钮时,触发响应,创建或者显示时间选择对话框 } }); // 通过java类Calendar获得系统当前时间数据信息,并更新显示在TextView上 final 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); updateDisplay(); } // 根据对话框标识创建对话框 @Override protected Dialog onCreateDialog(int id) { switch (id) { case TIME_DIALOG_ID: // 创建时间选择对话框 最后一个参数is24HourView,如果是true,则为24小时制,否则,则为12小时制。 return new TimePickerDialog(this, mTimeSetListener, mHour, mMinute, true); case DATE_DIALOG_ID: // 创建日期选择对话框 return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay); } return null; } // 根据对话框标识更新对话框 @Override protected void onPrepareDialog(int id, Dialog dialog) { switch (id) { case TIME_DIALOG_ID: // 更新时间选择对话框信息 ((TimePickerDialog) dialog).updateTime(mHour, mMinute); break; case DATE_DIALOG_ID: // 更新日期选择对话框信息 ((DatePickerDialog) dialog).updateDate(mYear, mMonth, mDay); break; } } // 更新日期和时间显示区的信息 private void updateDisplay() { mDateDisplay.setText(new StringBuilder() // 由于月份是按照从0到11进行计算,因此显示的时候加上1,进行转换。 .append(mMonth + 1).append("-").append(mDay).append("-") .append(mYear).append(" ").append(pad(mHour)).append(":") .append(pad(mMinute))); } // 理论上可以修改系统时间,但由于系统限制,缺乏root权限,实际上这个函数并不能真正去修改系统时间。 private void updateSystemTime() { final Calendar c = Calendar.getInstance(); // 由于月份是按照从0到11进行计算,因此设置的时候减去1,进行转换。 c.set(mYear, mMonth - 1, mDay, mHour, mMinute); } // 日期设置监听器,当改变日期时,更新时间显示信息 private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mYear = year; mMonth = monthOfYear; mDay = dayOfMonth; updateSystemTime(); updateDisplay(); } }; // 时间设置监听器,当改变时间时,更新时间显示信息 private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() { public void onTimeSet(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; mMinute = minute; updateSystemTime(); updateDisplay(); } }; // 当小时或者分钟为个位数字时,前面加一个0 private static String pad(int c) { if (c >= 10) return String.valueOf(c); else return "0" + String.valueOf(c); } }
实例二:DateWidgets2
res-value-string.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="date_widgets_example_dateDisplay_text"></string> <string name="date_widgets_example_pickTime_text">change the time</string> <string name="date_widgets_example_pickDate_text">change the date</string> </resources>
res-layout-date_widgets_example_2.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <!-- 内嵌日期选择控件 --> <DatePicker android:id="@+id/datePicker" android:layout_height="wrap_content" android:layout_width="match_parent"/> <!-- 内嵌时间选择控件 --> <TimePicker android:id="@+id/timePicker" android:layout_height="wrap_content" android:layout_width="match_parent"/> <!-- 日期和时间显示区 --> <TextView android:id="@+id/dateDisplay" android:layout_height="wrap_content" android:layout_width="match_parent" android:paddingLeft="4dip" android:text="@string/date_widgets_example_dateDisplay_text"/> </LinearLayout>
src-com.example.android.apis.view-DateWidgets2.java
package com.example.android.apis.view; import java.util.Calendar; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import android.widget.TimePicker; import android.widget.DatePicker; import com.example.android.apis.R; public class DateWidgets2 extends Activity { // 日期和时间显示区域 private TextView mTimeDisplay; // 日期和时间相关定义数据 private int mYear; private int mMonth; private int mDay; private int mHour; private int mMinute; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.date_widgets_example_2); // 通过findViewById方法获得一个TextView对象,用作日期和时间显示区 mTimeDisplay = (TextView) findViewById(R.id.dateDisplay); // 通过java类Calendar获得系统当前时间数据信息,并更新显示在TextView上 final 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); updateDisplay(); // 通过findViewById方法获得一个DatePicker对象 DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker); datePicker.init(mYear, mMonth, mDay, new DatePicker.OnDateChangedListener(){ public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mYear = year; mMonth = monthOfYear; mDay = dayOfMonth; updateSystemTime(); updateDisplay(); } }); // 通过findViewById方法获得一个TimePicker对象 TimePicker timePicker = (TimePicker) findViewById(R.id.timePicker); timePicker.setIs24HourView(true); //参数is24HourView,如果是true,则为24小时制,否则,则为12小时制。 timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() { public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; mMinute = minute; updateSystemTime(); updateDisplay(); } }); } // 更新日期和时间显示区的信息 private void updateDisplay() { mTimeDisplay.setText(new StringBuilder() // 由于月份是按照从0到11进行计算,因此显示的时候加上1,进行转换。 .append(mMonth + 1).append("-").append(mDay).append("-") .append(mYear).append(" ").append(pad(mHour)).append(":") .append(pad(mMinute))); } // 理论上可以修改系统时间,但由于系统限制,缺乏root权限,实际上这个函数并不能真正去修改系统时间。 private void updateSystemTime() { final Calendar c = Calendar.getInstance(); // 由于月份是按照从0到11进行计算,因此设置的时候减去1,进行转换。 c.set(mYear, mMonth - 1, mDay, mHour, mMinute); } // 当小时或者分钟为个位数字时,前面加一个0 private static String pad(int c) { if (c >= 10) return String.valueOf(c); else return "0" + String.valueOf(c); } }
知识点1:如何修改系统时间?
最初我以为android下修改系统时间是一件很容易的事情,但是后来,我发现我错了。为了系统安全起见,一般情况下,android是禁止应用程序修改系统时间的。不过,通过应用程序来修改系统时间也不是不可能的。如果你对此有兴趣的话,请点击阅读: 《Android中如何修改系统时间》
知识点2:Android Dialog之showDialog(int id)
关于android下Dialog创建以及使用等,以下文章讲的非常详细,建议点击阅读: 《android 之 Dialog》
预览效果: