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

int intID = (ColorDrawable) textView.getBackground().getColor(); 

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! 🙂

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.