2012-01-12 27 views
14

Estoy buscando una posibilidad para ajustar el color del texto del widget datepicker en una aplicación Android Honeycomb. Sabía que el widget es inherente al color del texto global, que es blanco en mi caso, pero necesito un color de texto negro para el selector de fecha ya que el fondo aquí es de color gris claro.Android HoneyComb DatePicker Color del texto

¿Alguien sabe cómo solucionar esto?

Respuesta

2

Hola :) hay un widget EditText en algún lugar dentro del widget datepicker. Sólo tienes que encontrarlo. Puede hacer esto usando alguna codificación creativa y comenzar a buscar a través de los elementos secundarios del widget datepicker usando métodos como getChildAt (index) y getChildCount() y luego recorrerlo.

También puede hacer algo como esto, pero no estoy seguro de que funcionará en todos los dispositivos, mejor bucle a través de los niños datepickers:

DatePicker picker; 
ViewGroup childpicker; 

childpicker = (ViewGroup) findViewById(Resources.getSystem().getIdentifier("month" /*rest is: day, year*/, "id", "android")); 

EditText textview = (EditText) picker.findViewById(Resources.getSystem().getIdentifier("timepicker_input", "id", "android")); 

textview.setTextColor(Color.GREEN); 

Espero que esto ayude :)

+2

donde usas childpicker aquí? –

1

hmm lo hice así:

private void hackDatePickerTextColorToBlack(){ 
    setTextColorBlack(datePicker); 
} 

private static void setTextColorBlack(ViewGroup v) { 
    int count = v.getChildCount(); 
    for (int i = 0; i < count; i++) { 
     View c = v.getChildAt(i); 
     if(c instanceof ViewGroup){ 
      setTextColorBlack((ViewGroup) c); 
     } else 
     if(c instanceof TextView){ 
      ((TextView) c).setTextColor(Color.BLACK); 
     } 
    } 
} 

esto cambia el color del texto a negro, pero cuidado con la recursividad esto podría tomar algún tiempo.

También cuando se usa el selector de fecha, el texto vuelve a ser blanco, ¡así que es una mierda!

FYI aquí está la fuente de DatePicker: https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/date_picker.xml

Los EditTexts son NumberPickers

27

HECHO

lo hizo en un tema en el styles.xml aplicación (básicamente establecer un estilo en todas EditText fields)

Tengo esto en/values-v11/por lo que solo afecta> HC

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android"> 

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

    <style name="Widget.EditText.Black" parent="@android:style/Widget.EditText"> 
     <item name="android:textColor">@color/black</item> 
    </style> 

</resources> 

Luego, en mi AndroidManifest, para la actividad que utilice el Selector de fechas:

 <activity 
      android:name=".ui.phone.SelectDateActivity" 
      android:label="Date Selection" 
      android:screenOrientation="portrait" 
      android:theme="@style/Theme.SelectDate" /> 

eso es todo!


Mi Haciendo:

que llegó a esta conclusión mediante la comprobación de la fuente DatePicker:

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/date_picker.xml

Eso me mostró la DatePicker utiliza NumberPicker

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/number_picker.xml https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/number_picker_with_selector_wheel.xml

El NumberPicker utiliza un EditarTexto

Puede, por tanto, el estilo de un EditarTexto

android : how to change the style of edit text?

Y si se busca en este archivo para "EDITTEXT" verá usted puede definir un estilo en todas editar campos de texto en una actividad!

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/themes.xml

Puede alterar temporalmente este material:

<item name="editTextStyle">@android:style/Widget.EditText</item> 
+0

gracias, trabajado para mí. –

+0

¡Gran respuesta! Recomiendo usar AppBaseTheme como padre de Theme.SelectDate, para que también funcione con API más bajas. –

6

He encontrado esta solución: la depuración de objeto DatePicker, consigo el jerarqy objeto. Tal vez no es una solución elegante, pero funciona:

private void setNumberPickerProperties(DatePicker dp) 
{ 
     LinearLayout l = (LinearLayout)dp.getChildAt(0); 
     if(l!=null) 
     { 
       l = (LinearLayout)l.getChildAt(0); 
       if(l!=null) 
       { 
         for(int i=0;i<3;i++) 
         { 
           NumberPicker np = (NumberPicker)l.getChildAt(i); 
           if(np!=null) 
           { 
             EditText et = (EditText)np.getChildAt(1); 
             et.setTextColor(Color.BLACK); 
           } 
         } 
       } 
     } 
} 
0

tuve un problema similar, aunque yo estaba buscando para cambiar el tamaño del texto, pero eso es un detalle menor. Usé el mismo proceso para separar la jerarquía de Vista y cambiar el tamaño de la fuente. Sin embargo, una vez al mes (o día o año) se cambió, la fuente cambió de nuevo al valor original. Ideal para ver, malo para editar. Di el siguiente paso y agregué un oyente de cambio. Ahora, cuando el valor se cambia, salta de nuevo a la fuente preferida:

public void setFontSize(final int size) { 

    LinearLayout l = (LinearLayout) mPicker.getChildAt(0); 
    if (l != null) { 
     l = (LinearLayout) l.getChildAt(0); 
     if (l != null) { 
      for (int i = 0; i < 3; i++) { 
       NumberPicker np = (NumberPicker) l.getChildAt(i); 
       for (int x = 0; x < np.getChildCount(); x++) { 
        View view = np.getChildAt(x); 
        if ((view != null) && (view instanceof TextView)) { 
         final TextView tv = (TextView) view; 
         tv.setTextSize(size); 
         tv.setOnEditorActionListener(new OnEditorActionListener() { 

          public boolean onEditorAction(TextView v, 
            int actionId, KeyEvent event) { 
           tv.setTextSize(size); 
           return false; 
          } 
         }); 
        } 
       } 
      } 
     } 
    } 

} 
-1

La función setTextColorBlack() sólo funciona una vez. Si desplazo el marcador de fecha, todas las textviews se convierten en el color predeterminado, hasta que tabulo en una fecha o mes o año en particular.

+1

Aunque su _answer_ no contiene un signo de interrogación, parece ser una _solicitud_ con respecto a la solución de otra respuesta. Por favor no publique preguntas como respuestas. – Bowdzone