Android 中的時間日期控件

TextClock

以字符串的形式顯示當前時間

更多方法及屬性請查看官方API
API17+

在佈局文件中添加

<TextClock
    android:id="@+id/textClock"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

TextClock的XML屬性:

  • android:format12Hour 指定用於在12小時模式下顯示時間和/或日期
  • android:format24Hour 指定用於在24小時模式下顯示時間和/或日期
  • android:timeZone 指定要使用的時區

DatePicker

提供一個選擇日期的窗口小部件

更多方法及屬性請查看官方API

獲取系統日期和時間的方法

// 獲取日曆對象
Calendar calendar = Calendar.getInstance();
// 獲取當前對應的年、月、日的信息
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH) + 1;
day = calendar.get(Calendar.DAY_OF_MONTH);
// 獲取當前時間信息
hour=calendar.get(Calendar.HOUR_OF_DAY);
minute=calendar.get(Calendar.MINUTE);

在佈局文件中添加

<DatePicker
    android:id="@+id/dp_pro"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:datePickerMode="spinner" />

XML屬性:

  • android:calendarTextColor 日曆列表中的文本顏色。
  • android:calendarViewShown=”true|fase” 設置該DatePicker是否顯示CalendarView組件,只對spinner模式下有效。
  • android:datePickerMode=”calendar|spinner” 定義DatePicker小部件的外觀,該屬性在API21之後添加
  • android:dayOfWeekBackground 日期的背景色
  • android:dayOfWeekTextAppearance 日期的文本顏色
  • android:firstDayOfWeek=”integer” 基於日曆的一週第一天
  • android:headerBackground 表頭選擇的日期的背景
  • android:headerDayOfMonthTextAppearance 表頭天的文本外觀
  • android:headerMonthTextAppearance 表頭月的文本外觀
  • android:headerYearTextAppearance 表頭年的文本外觀
  • android:maxDate=”string using \\” 通過以mm / dd / yyyy格式此日曆視圖中顯示的最大的日期。
  • android:minDate=”string using \\” 通過以mm / dd / yyyy格式此日曆視圖中示出的最小的日期。
  • android:spinnersShown=”true|false” 設置該日期選擇器是否顯示Spinner日期選擇組件,只在spinner模式下有效
  • android:startYear=”integer” 設置日期選擇器允許選擇的第一年,如“1940年”。
  • android:endYear=”integer” 設置日期選擇器允許選擇的最後一年。
  • android:yearListItemTextAppearance 列表中年的文本外觀
  • android:yearListSelectorColor 列表中年的選擇圓圈的顏色

代碼中:

//1.findViewById
DatePicker datePicker = (DatePicker) findViewById(R.id.dp_pro);
//2.使用init()方法初始化DatePicker在刷新Spinner之前顯示的日期;並設置OnDateChangedListener,監聽器可以爲空。這裏使用activity implements OnDateChangedListener
datePicker.init(year,monthOfYear,dayOfMonth,this);

//設置OnDateChangedListener後重寫的方法,修改DatePicker裏的年、月、日時觸發
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    if (view.getId()==R.id.dp_pro){
        datePro=year+"-"+(monthOfYear+1)+"-"+dayOfMonth+" ";//這裏月份值+1,因爲獲取的月份值比正常月份值小1
        tvTimePro.setText(datePro+timePro);
        Log.d(TAG, "onDateChanged: "+datePro);
    }else if (view.getId()==R.id.dp_custom){
        dateCustom=year+"-"+(monthOfYear+1)+"-"+dayOfMonth+" ";
        tvTimeCustom.setText(dateCustom+timeCustom);
        Log.d(TAG, "onDateChanged: "+dateCustom);
    }
}

另外DatePicker支持直接輸入日期值(長按就可以,僅限於在spinner模式下)

TimePicker

提供一個選擇時間的窗口小部件

更多方法及屬性請查看官方API

在佈局文件中添加

<TimePicker
    android:id="@+id/tp_custom"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:timePickerMode="spinner" />

TimePicker的XML屬性:

  • android:timePickerMode=”spinner|clock” TimePicker顯示樣式,分別對應spinner樣式和時鐘樣式

代碼中:

timePicker_custom = (TimePicker) findViewById(R.id.tp_custom);
        //24小時制
        timePicker_custom.setIs24HourView(true);
        //爲timePicker添加監聽器,不可爲空。修改TimePicker裏的時、分時觸發
        timePicker_custom.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
            @Override
            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                timeCustom=hourOfDay+":"+minute;
                tvTimeCustom.setText(dateCustom+timeCustom);
                Log.d(TAG, "onTimeChanged: "+timeCustom);
            }
        });

TimePicker也支持直接輸入日期值(長按就可以,僅限於在spinner模式下)

Chronometer

Class that implements a simple timer

更多方法及屬性請查看官方API

在佈局文件中添加

Chronometer的XML屬性:

  • android:countDown=”true|false” 指定此計時器是否倒計時或從基數計數
  • android:format=”string” 格式字符串:如果指定,計時器將顯示此字符串,第一個“%s”由“MM:SS”或“H:MM:SS”形式的當前定時器值替換

代碼中:

Chronometer chron= (Chronometer) findViewById(R.id.chron);
//設置遞增定時器參考的時間爲系統時鐘過去實時時間
chron.setBase(SystemClock.elapsedRealtime());
chron.start();
//設置當計時器更改時要調用的偵聽器
chron.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
        @Override
        public void onChronometerTick(Chronometer chronometer) {
            //action
        }
    });
ToggleButton tbn_chro = (ToggleButton) findViewById(R.id.tbn_chro);
tbn_chro.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            // 開始計數。 這不影響從setBase(long)設置的基數,只是視圖顯示。
            // 計時器通過定期將消息調度到處理程序,即使Widget不可見。 爲了確保不會發生資源泄漏,
            // 用戶應確保每個start()調用都具有對stop()的相互調用。
            chron.start();
        } else {
            // 停止計數。這不影響從setBase(long)設置的基數,只是視圖顯示。
            // 這將停止向處理程序發送的消息,通過start()有效地釋放將按照計時器運行的資源。
            chron.stop();
        }
    }
});

CalendarView

CalendarView是用於顯示和選擇日期的日曆小部件。此日曆支持的日期範圍是可配置的

在佈局文件中添加

<CalendarView
    android:id="@+id/cal_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

CalendarView的XML屬性

  • android:dateTextAppearance calendar中天數的文本外觀
  • android:firstDayOfWeek=”integer” 基於日曆的一週第一天
  • android:maxDate=”string using \\” 通過以mm / dd / yyyy格式此日曆視圖中顯示的最大的日期。
  • android:minDate=”string using \\” 通過以mm / dd / yyyy格式此日曆視圖中示出的最小的日期。

代碼中:

CalendarView cal = (CalendarView) findViewById(R.id.cal_view);
cal.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
    @Override
    public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
        //action
    }
});

DatePickerDialog和TimePickerDialog

與DatePicker和TimePicker的區別在於DatePicker和TimePicker是顯示在屏幕畫面上的,而DatePickerDialog和TimePickerDialog對象則是以彈出Dialog的方式來顯示

使用方法

new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            Toast.makeText(MainActivity.this, "DatePickerDialog "+year + "-" + (month + 1) + "-" + dayOfMonth, Toast.LENGTH_SHORT).show();
        }
    }, year, month, day).show();

new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            Toast.makeText(MainActivity.this, "TimePickerDialog " + hourOfDay + ":" + minute, Toast.LENGTH_SHORT).show();
        }
    }, hour, minute, true).show();

其他Picker之NumberPicker

用於數字選擇

在佈局文件中添加:

<NumberPicker
     android:id="@+id/num_pick"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"/>

代碼中:

NumberPicker numberPicker= (NumberPicker) findViewById(R.id.num_pick);
// 設置NumberPicker屬性
numberPicker.setMinValue(minNum);
numberPicker.setMaxValue(maxNum);
numberPicker.setValue(currentNum);

// 監聽數值改變事件
numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
    @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        currentNum = newVal;
        Toast.makeText(MainActivity.this, "currentNum= "+currentNum, Toast.LENGTH_SHORT).show();
    }
});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章