Cómo establecer atributos personalizados de componentes personalizados de forma programática?

Tengo un componente personalizado llamado CircleView , y quiero cambiar un atributo personalizado llamado fillColor definido en attrs.xml :

 <declare-styleable name="CircleView"> <attr name="radius" format="integer" /> <attr name="fillColor" format="color" /> </declare-styleable> 

Lo he establecido inicialmente en mi XML de diseño, que actualmente se parece a esto (namespace circleview se define como xmlns:circleview="http://schemas.android.com/apk/res-auto" , funciona bien cuando lo defino En el XML, por lo que esto no debería ser un problema):

 <com.mz496.toolkit.CircleView ... circleview:fillColor="#33ffffff"/> 

Puedo obtener el atributo fillColor bien en mi CircleView , que extiende View , pero no sé cómo establecer su valor.

He investigado cosas como setBackgroundColor y buscado otros métodos "set", pero no pude encontrar ninguno. Imaginé un método como

circle.setAttribute(R.styleable.CircleView_fillColor, "#33ff0000")

Un CircleView en el diseño no es más que una instancia de la clase CircleView , por lo que simplemente agregue una función a CircleView.java :

 public void setFillColor(int newColor) { fillColor = newColor; } 

Y luego llámelo cuando sea necesario:

 CircleView circle_view = (CircleView) findViewById(R.id.circle_view); circle_view.setFillColor(0x33ffffff); circle_view.invalidate(); 

También tenga en cuenta que esto sólo cambia una variable interna, pero todavía necesita volver a dibujar el componente personalizado utilizando el método invalidate() de la clase View , ya que el componente personalizado sólo se vuelve a dibujar automáticamente si se vuelve a dibujar la vista completa, por ejemplo, al cambiar fragmentos Vea: forzar una vista para que se vuelva a dibujar ).

(Pensé en esto al final cuando estaba a punto de preguntar, "¿Tendría que definir esto yo mismo?" Y traté de definirlo yo mismo, y funcionó.)

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