Android DatePicker字体

我知道你可以将自定义的TypeFace应用于Android中的TextView,如下所示:

TextView tv = findViewById(R.id.textview01); Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/BLACKROSE.TTF"); tv.setTypeface(tf); 

有没有办法做到这一点DatePicker?

看看源代码后,Datepicker小部件包含3个NumberPicker小部件(用于日,月,年),而小部件又包含TextView。 所以你必须在DatePicker里的NumberPickers里设置TextView的字体。

我认为你必须得到NumberPicker和DatePicker的源代码,并修改源代码来实现这一点,恐怕说起来容易做起来难。

这是我的代码。 我希望对某人有用。

 DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker1); LinearLayout layout1 = (LinearLayout) datePicker.getChildAt(0); LinearLayout layout = layout1.getChildAt(0); // day LinearLayout day = (LinearLayout) layout.getChildAt(0); setNumberPicker(day); // month LinearLayout month = (LinearLayout) layout.getChildAt(1); setNumberPicker(month); // year LinearLayout year = (LinearLayout) layout.getChildAt(2); setNumberPicker(year); 

 private void setNumberPicker(LinearLayout ll) { ((ImageButton) ll.getChildAt(0)).setBackgroundResource(R.drawable.plus_button); ((ImageButton) ll.getChildAt(2)).setBackgroundResource(R.drawable.minus_button); EditText et = (EditText) ll.getChildAt(1); et.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); et.setTypeface(youtTypeface); } 

这是我的解决方案:

 private void overrideFonts(View v) { ViewGroup picker; try { picker = (DatePicker) v; } catch (Exception e) { picker = (TimePicker) v; } LinearLayout layout1 = (LinearLayout) picker.getChildAt(0); if (picker instanceof TimePicker) { if (layout1.getChildAt(1) instanceof NumberPicker) { NumberPicker v1 = (NumberPicker) layout1.getChildAt(1); final int count = v1.getChildCount(); for (int i = 0; i < count; i++) { View child = v1.getChildAt(i); try { Field wheelpaint_field = v1.getClass().getDeclaredField("mSelectorWheelPaint"); wheelpaint_field.setAccessible(true); ((Paint) wheelpaint_field.get(v1)).setTypeface(//your font here); ((Paint) wheelpaint_field.get(v1)).setColor(getResources().getColor(R.color.colorOrange)); ((EditText) child).setTypeface(// your font here); v1.invalidate(); } catch (Exception e) { //TODO catch. //If java cant find field then it will catch here and app wont crash. } } } } LinearLayout layout = (LinearLayout) layout1.getChildAt(0); for (int j = 0; j < 3; j++) { try { if (layout.getChildAt(j) instanceof NumberPicker) { NumberPicker v1 = (NumberPicker) layout.getChildAt(j); final int count = v1.getChildCount(); for (int i = 0; i < count; i++) { View child = v1.getChildAt(i); try { Field wheelpaint_field = v1.getClass().getDeclaredField("mSelectorWheelPaint"); wheelpaint_field.setAccessible(true); ((Paint) wheelpaint_field.get(v1)).setTypeface(//your font here); ((Paint) wheelpaint_field.get(v1)).setColor(getResources().getColor(R.color.colorOrange)); ((EditText) child).setTypeface(//your font here); v1.invalidate(); } catch (Exception e) { //TODO catch. //If java cant find field then it will catch here and app wont crash. } } } } catch (Exception e) { //TODO catch. //If java cant find field then it will catch here and app wont crash. } } } 

如果你可以使用DatePickerDialog,那么你可以简单地获取对话框的按钮,如:

 DatePickerDialog datePickerDialog; // GET your dialog datePickerDialog.show(); datePickerDialog.getButton(DatePickerDialog.BUTTON_POSITIVE).setTextSize(30); // 30 is your text size datePickerDialog.getButton(DatePickerDialog.BUTTON_NEGATIVE).setTextSize(30); 

相当于SKG解决方案的Kotlin-Anko

  startTimePicker = timePicker { this.applyRecursively { when(it) { is NumberPicker -> { val paintField = it.javaClass.getDeclaredField("mSelectorWheelPaint") paintField.isAccessible = true (paintField.get(it) as? Paint)?.typeface = //your font here } is TextView -> { it.typeface = //your font here } } }