2012-02-09 37 views
4

我知道你可以應用自定義字體到一個TextView在Android中是這樣的:的Android DatePicker的字樣

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

是否有任何可能的方式爲一個datepicker做到這一點?

回答

4

看了看源代碼後,Datepicker小部件包含3個NumberPicker小部件(用於日,月,年),而小部件又包含TextView。因此,您必須在DatePicker內的NumberPickers內部爲TextView設置字體。

我想你必須得到NumberPicker和DatePicker的源代碼,並修改源代碼來實現這一點,說起來容易做起來難。

+0

從哪裏可以獲得源代碼? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 2012-02-10 01:22:24

+1

GrepCode,所有的android源碼都可以在那裏找到。 DatePicker http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/DatePicker.java NumberPicker http://grepcode.com /file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/com/android/internal/widget/NumberPicker.java – triggs 2012-02-10 09:51:22

9

這是我的代碼。我希望這會對某人有用。

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); 
} 
3

這裏是我的解決方案:

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. 
     } 
    } 

} 
0

如果你可以使用DatePickerDialog,則U可以簡單地獲得對話框的按鈕,如:

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); 
0

Kotlin-Anko相當於SKG的解決方案

 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 
        } 
       } 
      }