更多精彩内容,请点击阅读:《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》
预览效果:
欢迎大家关注我的微信公众号:
微信公众号:sn0wdr1am