android 開發 時間選擇器TimePicker的使用


 

前言

  我知道現在github上有很多功能強大的各色選擇器,但是Android其實是自帶一些時間選擇器的。在不需要太復雜的ui開發下可以選擇使用這些系統自帶的。android系統自帶時間控件:

  • DatePicker 日期顯示控件
  • DatePickerDialog 日期對話框控件
  • TimePicker 時間顯示控件
  • TimePickerDialog 時間對話框控件

講解TimePicker選擇器的一些自定義設置

首先是布局的創建:

<TimePicker
    android:id="@+id/timepicker"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:background="#ffffff"
     />

設置TimePicker選擇器風格

TimePicker 本身自帶兩種風格,都可以在xml中設置,一種是

android:timePickerMode="clock"

 

另一種是:

android:timePickerMode="spinner"


TimePicker的顯示規模大小設置

android:scaleX="2"
android:scaleY="2"

效果:

 

TimePicker的數據回調

mTimepicker = (TimePicker) inflate.findViewById(R.id.timepicker);
mTimepicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);  //設置點擊事件不彈鍵盤
mTimepicker.setIs24HourView(true);   //設置時間顯示為24小時
mTimepicker.setHour(8);  //設置當前小時
mTimepicker.setMinute(10); //設置當前分(0-59)
mTimepicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {  //獲取當前選擇的時間
    @Override
    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
    }
});

利用反射修改一些選擇器的字體效果與背景顏色

需要用到反射的方法了,比如更改分割線的樣式,設置起始截止時間等:

首先我們要通過反射獲取TimePicker源碼里hour和minute的id:

Resources systemResources = Resources.getSystem();
int hourNumberPickerId = systemResources.getIdentifier("hour", "id", "android");
int minuteNumberPickerId = systemResources.getIdentifier("minute", "id", "android");
 
        

然后用我們定義的TimePicker來獲取這個id並轉換成hour和minute對應的NumberPicker:

NumberPicker hourNumberPicker = (NumberPicker) mTimepicker.findViewById(hourNumberPickerId);
NumberPicker minuteNumberPicker = (NumberPicker) mTimepicker.findViewById(minuteNumberPickerId);

通過獲取到的hourNumberPicker和minuteNumberPicker我們可以先進行TimePicker的時間限制:

hourNumberPicker.setMinValue(8);   //設置最小hour
hourNumberPicker.setMaxValue(12);  //設置最大hour
minuteNumberPicker .setMinValue(0);  //設置最小minute
minuteNumberPicker .setMaxValue(30);  //設置最大minute

修改滾動條背景顏色

hourNumberPicker.setBackgroundColor(getResources().getColor(R.color.colorBlue));// 修改背景顏色

效果圖:

隱藏冒號

用最暴力的方式隱藏滾動條的冒號,就是直接找ChildAt

        ViewGroup view = (ViewGroup) mTimepicker.getChildAt(0);
        ViewGroup view2 = (ViewGroup) view.getChildAt(1);
        view2.getChildAt(1).setVisibility(View.GONE);

禁止鍵盤輸入

mTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);

TimePicker分割線的顏色和高度

private void setNumberPickerDivider(NumberPicker numberPicker) {
    NumberPicker picker = numberPicker;
    Field[] pickerFields = NumberPicker.class.getDeclaredFields();
    for (Field pf : pickerFields) {
        if (pf.getName().equals("mSelectionDivider")) {  //設置顏色
            pf.setAccessible(true);
            ColorDrawable colorDrawable = new ColorDrawable(
                    ContextCompat.getColor(this, R.color.colortime)); //選擇自己喜歡的顏色
            try {
                pf.set(numberPicker, colorDrawable);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        if (pf.getName().equals("mSelectionDividerHeight")) {   //設置高度
            pf.setAccessible(true);
            try {
                int result = 3;  //要設置的高度
                pf.set(picker, result);
            } catch (Exception e) {
                e.printStackTrace();
            }
            break;
        }
        picker.invalidate();
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM