574
財經資訊
API Demos 2.3 學習筆記 (11)-- Views->Date Widgets
更多精彩內容,請點擊閱讀:《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:andro
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:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/date_widgets_example_dateDisplay_text"/>
</LinearLayout>
<!-- 按鈕一,點擊彈出日期選擇對話框 -->
<Button android:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/date_widgets_example_pickDate_text"/>
<!-- 按鈕二,點擊彈出時間選擇對話框 -->
<Button android:
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:andro
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- 內嵌日期選擇控件 -->
<DatePicker android:
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
<!-- 內嵌時間選擇控件 -->
<TimePicker android:
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
<!-- 日期和時間顯示區 -->
<TextView android:
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》
預覽效果:


最後更新:2017-04-02 06:51:56