修改Android 原生TimePicker的樣式

方式一

修改Picker的字體顏色的方法,就是指自定義TimePicker的樣式

<TimePicker
    android:id="@+id/time_picker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="2dp"
    android:layout_marginTop="2dp"
    android:theme="@style/Theme.picker"
    android:timePickerMode="spinner" />

在style.xml下面加入下面代碼:

<style name="Theme.picker" parent="android:Theme.Holo.NoActionBar">
    <item name="android:editTextStyle">@style/Widget.EditText.White</item>
</style>

<style name="Widget.EditText.White" parent="@android:style/Widget.EditText">
    <item name="android:textColor">@color/white</item>
    <item name="android:textSize">30sp</item>
</style>

方式二:通過工具類修改

public class TimePickerUIUtil {

    private static final String TAG = TimePickerUIUtil.class.getSimpleName();

    public static void set_timepicker_text_colour(TimePicker time_picker,Context context) {
        Resources system = Resources.getSystem();
        int hour_numberpicker_id = system.getIdentifier("hour", "id", "android");
        int minute_numberpicker_id = system.getIdentifier("minute", "id", "android");
        int ampm_numberpicker_id = system.getIdentifier("amPm", "id", "android");

        NumberPicker hour_numberpicker = (NumberPicker) time_picker.findViewById(hour_numberpicker_id);
        NumberPicker minute_numberpicker = (NumberPicker) time_picker.findViewById(minute_numberpicker_id);
        NumberPicker ampm_numberpicker = (NumberPicker) time_picker.findViewById(ampm_numberpicker_id);

        set_numberpicker_text_colour(hour_numberpicker,context);
        set_numberpicker_text_colour(minute_numberpicker,context);
        set_numberpicker_text_colour(ampm_numberpicker,context);

        setNumberPickerDividerColor(hour_numberpicker, Color.rgb(255,255,255));
        setNumberPickerDividerColor(minute_numberpicker,Color.rgb(255,255,255));
        setNumberPickerDividerColor(ampm_numberpicker,Color.rgb(255,255,255));

        setPickerSize(hour_numberpicker,70,context);
        setPickerSize(minute_numberpicker,70,context);
        setPickerSize(ampm_numberpicker,70,context);
    }

    private static void set_numberpicker_text_colour(NumberPicker number_picker, Context context) {
        final int count = number_picker.getChildCount();
        //這里就是要設(shè)置的顏色,修改一下作為參數(shù)傳入會更好
        final int color = ContextCompat.getColor(context, R.color.white);

        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(TAG, "set_numberpicker_text_colour: "+e);
            }
        }
    }

    private static void setNumberPickerDividerColor(NumberPicker numberPicker, int color) {
        Field[] pickerFields = NumberPicker.class.getDeclaredFields();
        for (Field SelectionDividerField : pickerFields) {
            if (SelectionDividerField.getName().equals("mSelectionDivider")) {
                SelectionDividerField.setAccessible(true);
                try {
                    SelectionDividerField.set(numberPicker, new ColorDrawable(color));
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
                break;
            }
        }
    }

    //此方法將dp值轉(zhuǎn)換為px值,以保證適配不同分辨率機型
    private static int dp2px(Context context, float dpVal)
    {
        retur                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          n (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                dpVal, context.getResources().getDisplayMetrics());
    }

    //這個方法是改變NumberPicker大小的方法,傳入的參數(shù)為要修                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  改的NumberPicker和NumberPicker的寬度值
    private static void setPickerSize(NumberPicker np, int widthDpValue,Context context) {
        int widthPxValue = dp2px(context, widthDpValue);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(widthPxValue, LinearLayout.LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 0, 0, 0);//這兒參數(shù)可根據(jù)需要進行更改
        np.setLayoutParams(params);
    }

    private static List<NumberPicker> findNumberPicker(ViewGroup viewGroup)
    {
        List<NumberPicker> npList = new ArrayList<NumberPicker>();
        View child = null;

        if (null != viewGroup)
        {
            for (int i = 0; i < viewGroup.getChildCount(); i++)
            {
                child = viewGroup.getChildAt(i);
                if (child instanceof NumberPicker)
                {
                    npList.add((NumberPicker)child);
                }
                else if (child instanceof LinearLayout)
                {
                    List<NumberPicker> result = findNumberPicker((ViewGroup)child);
                    if (result.size() > 0)
                    {
                        return result;
                    }
                }
            }
        }

        return npList;
    }

    private static EditText findEditText(NumberPicker np)
    {
        if (null != np)
        {
            for (int i = 0; i < np.getChildCount(); i++)
            {
                View child = np.getChildAt(i);

                if (child instanceof EditText)
                {
                    return (EditText)child;
                }
            }
        }

        return null;
    }

    public static void setNumberPickerTextSize(ViewGroup viewGroup)
    {
        List<NumberPicker> npList = findNumberPicker(viewGroup);
        if (null != npList)
        {
            for (NumberPicker np : npList)
            {
                EditText et = findEditText(np);
                et.setFocusable(false);
                et.setGravity(Gravity.CENTER);
                et.setTextSize(30);

            }
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,068評論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,388評論 4 61
  • “標(biāo)題在大部分的廣告中,都是最重要的元素,能夠決定讀者到底會不會看這則廣告。一般來說,讀標(biāo)題的人比讀內(nèi)文的人多4倍...
    奔跑的湯盆兒閱讀 2,693評論 11 31
  • 今天天氣不好,有些陰冷。海亮老師親自帶大家做操。 正式做之前,老師教了我們幾節(jié)放松的動作,我感到肚皮舞的動作最有感...
    王悅yue閱讀 220評論 0 3
  • 在數(shù)據(jù)操作的過程中可能出現(xiàn)的情況 1、臟讀 臟讀是指在一個事務(wù)處理過程里讀取了另一個未提交的事務(wù)中的數(shù)據(jù)。 當(dāng)一個...
    Mongogo閱讀 2,043評論 0 1

友情鏈接更多精彩內(nèi)容