TimePicker使用全解

目錄

1.簡單使用
2.指定字體顏色及大小
3.設置24小時顯示格式,當前顯示時間,禁止調起鍵盤,監聽時間改變
4.設置分割線顏色,設置NumberPicker大小

簡單顯示

    <TimePicker
        android:id="@+id/time_picker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:timePickerMode="spinner"
        android:theme="@style/Theme.TimePicker">
    </TimePicker>

android:theme爲指定字體顏色及大小用到的。

指定字體顏色及大小

在style文件中定義Style

    <style name="Theme.TimePicker" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:editTextStyle">@style/Widget.AppCompat.EditText.Gray</item>
    </style>

    <style name="Widget.AppCompat.EditText.Gray">
        <item name="android:textSize">18sp</item>
        <item name="android:textColor">#b3b3b3</item>
    </style>

指定android:theme爲定義的Style

一些設置

        mTimePicker.setIs24HourView(true);//設置爲24小時顯示格式
        mTimePicker.setCurrentHour(0); //當前小時
        mTimePicker.setCurrentMinute(30); //當前分鐘
        mTimePicker.setDescendantFocusability(DatePicker.FOCUS_BLOCK_DESCENDANTS);//設置父佈局focus,子控件不會focus,以此禁止調起鍵盤
        mTimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
            @Override
            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                long delayMills = (hourOfDay * 60 + minute) * 60 * 1000;
            }
        });

指定分割線divider顏色,設定Picker大小
這裏採用反射取得對應屬性進行更改

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

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

        setNumberPickerDivider(hourNumberPicker, Color.YELLOW);
        setNumberPickerDivider(minuteNumberPicker, Color.GREEN);
        setNumberpickerTextColour(hourNumberPicker, Color.RED);
        setNumberpickerTextColour(minuteNumberPicker, Color.BLUE);

//        setPickerSize(hourNumberPicker, 30, this);
    }

    //指定分割線顏色
    private void setNumberPickerDivider(NumberPicker numberPicker, int color) {

        try {
            Field dividerFields = NumberPicker.class.getDeclaredField("mSelectionDivider");

            dividerFields.setAccessible(true);

            dividerFields.set(numberPicker, new ColorDrawable(color));

        } catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException e) {
            Log.w("setNumberPickerTxtClr", e);
        }
    }



    //另一種指定文字顏色的方法
    private void setNumberpickerTextColour(NumberPicker number_picker, int color) {
        final int count = number_picker.getChildCount();

        for (int i = 0; i < count; i++) {
            View child = number_picker.getChildAt(i);

            try {
                Field wheelpaint_field = number_picker.getClass().getDeclaredField("mSelectorWheelPaint");
                wheelpaint_field.setAccessible(true);
                ((Paint) wheelpaint_field.get(number_picker)).setColor(color);
                ((EditText) child).setTextColor(color);
                number_picker.invalidate();
            } catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException e) {
                Log.i("setNumberPickerTxtClr", "set_numberpicker_text_colour: "+e);
            }
        }
    }


    //指定NumberPicker大小                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                改的NumberPicker和NumberPicker的寬度值
    private static void setPickerSize(NumberPicker np, int widthDpValue,Context context) {
        int widthPxValue = ToolUtils.dp2px(context, widthDpValue);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(widthPxValue, LinearLayout.LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 0, 0, 0);
        np.setLayoutParams(params);
    }

顯示效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章