修改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ù)傳入會更好
        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);

            }
        }
    }
}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末张惹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馋缅,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绢淀,死亡現(xiàn)場離奇詭異萤悴,居然都是意外死亡,警方通過查閱死者的電腦和手機皆的,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門覆履,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人费薄,你說我怎么就攤上這事硝全。” “怎么了义锥?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵柳沙,是天一觀的道長岩灭。 經(jīng)常有香客問我拌倍,道長,這世上最難降的妖魔是什么噪径? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任柱恤,我火速辦了婚禮,結果婚禮上找爱,老公的妹妹穿的比我還像新娘梗顺。我一直安慰自己,他們只是感情好车摄,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布寺谤。 她就那樣靜靜地躺著,像睡著了一般吮播。 火紅的嫁衣襯著肌膚如雪变屁。 梳的紋絲不亂的頭發(fā)上意狠,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音环戈,去河邊找鬼澎灸。 笑死,一個胖子當著我的面吹牛遮晚,可吹牛的內(nèi)容都是我干的性昭。 我是一名探鬼主播县遣,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼艺玲!你這毒婦竟也來了括蝠?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤饭聚,失蹤者是張志新(化名)和其女友劉穎忌警,沒想到半個月后秒梳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡酪碘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年兴垦,在試婚紗的時候發(fā)現(xiàn)自己被綠了徙赢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片探越。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖枕屉,靈堂內(nèi)的尸體忽然破棺而出鲤氢,到底是詐尸還是另有隱情搀擂,我是刑警寧澤卷玉,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站咆蒿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沃测。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一馏谨、第九天 我趴在偏房一處隱蔽的房頂上張望附迷。 院中可真熱鬧惧互,春花似錦喇伯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匆赃。三九已至今缚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間姓言,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工滥壕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留兽泣,地道東北人胁孙。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像涮较,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子候齿,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

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