TimePicker的一些使用方法

首先是布局的创建:

TimePicker的一些使用方法

<TimePicker
    android:id="@+id/timepicker"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:background="#ffffff"
     />
TimePicker 本身自带两种风格,都可以在xml中设置,一种是
android:timePickerMode="clock"
TimePicker的一些使用方法

另一种是:

android:timePickerMode="spinner"

之后就是一些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



调用setNumberPickerDivider方法,将获取的hourNumberPicker和minuteNumberPicker分别传递进去即可设置所需
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();
    }
}