obtener el color de fondo de textview sin utilizar ColorDrawable (API 11)
¿Cómo puedo obtener el color de backround de un textview usando sólo API 9?
Yo básicamente quiero hacer esto, pero sólo con el API 9
- Problema de filtro AutoCompleteTextView
- TextView Borde superior en color diferente
- Borde (como sombra) sólido y grande en TextView Android
- Cómo dibujar un TextView en un mapa de bits (sin nunca ser dibujado en la pantalla)
- Destacando el color del texto usando Html.fromHtml () en Android?
int intID = (ColorDrawable) textView.getBackground().getColor();
- Android: agregar borde alrededor de textview
- Cómo obtener líneas máximas de texto
- Actualizar TextView cada segundo
- Android TextView gravedad
- ¿Cómo centrar el texto horizontal y verticalmente en un TextView en Android?
prueba esto…
public static int getBackgroundColor(TextView textView) { ColorDrawable drawable = (ColorDrawable) textView.getBackground(); if (Build.VERSION.SDK_INT >= 11) { return drawable.getColor(); } try { Field field = drawable.getClass().getDeclaredField("mState"); field.setAccessible(true); Object object = field.get(drawable); field = object.getClass().getDeclaredField("mUseColor"); field.setAccessible(true); return field.getInt(object); } catch (Exception e) { // TODO: handle exception } return 0; }
¡Gran respuesta! Sólo quería añadir que el campo privado mState
tiene dos campos de color:
-
mUseColor
-
mBaseColor
Para obtener el color del código anterior es grande, pero si desea establecer el color, tiene que establecerlo en los dos campos debido a problemas en StateListDrawable
instancias:
final int color = Color.RED; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { drawable.setColor(color); } else { try { final Field stateField = drawable.getClass().getDeclaredField( "mState"); stateField.setAccessible(true); final Object state = stateField.get(drawable); final Field useColorField = state.getClass().getDeclaredField( "mUseColor"); useColorField.setAccessible(true); useColorField.setInt(state, color); final Field baseColorField = state.getClass().getDeclaredField( "mBaseColor"); baseColorField.setAccessible(true); baseColorField.setInt(state, color); } catch (Exception e) { Log.e(LOG_TAG, "Cannot set color to the drawable!"); } }
Espero que esto fue útil! 🙂