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