Pregunta Tipo de letra DatePicker de Android


Soy consciente de que puede aplicar un TypeFace personalizado a un TextView en Android como este:

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

¿Hay alguna forma posible de hacer esto para un Selector de fechas?


5
2018-02-09 21:51


origen


Respuestas:


Después de echar un vistazo a la fuente, el widget Datepicker contiene 3 widgets NumberPicker (por día, mes, año) que a su vez tienen un TextView. Por lo tanto, tendrá que establecer el tipo de letra para TextView dentro de NumberPickers dentro de DatePicker.

Creo que tendrás que obtener la fuente para NumberPicker y DatePicker y modificar la fuente para lograr esto, es más fácil decirlo que hacerlo, me temo.


5
2018-02-10 00:07



Aquí está mi código. Espero que sea útil para alguien.

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

10
2017-11-02 20:49



Aquí está mi solución:

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

}

4
2017-07-22 20:18



Si puede usar DatePickerDialog, entonces u puede simplemente obtener los botones del diálogo, como:

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
2017-08-15 09:52



Kotlin-Anko equivalente a la solución de 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
                    }
                }
            }

0
2017-10-27 21:26