Creé una Vista personalizada (encuéntrela aquí ) con un atributo declare-styleable de tipo enum. En xml, ahora puedo elegir una de las entradas de enumeración para mi atributo personalizado. Ahora quiero crear un método para establecer este valor mediante programación, pero no puedo acceder a la enumeración.
attr.xml
<declare-styleable name="IconView">
<attr name="icon" format="enum">
<enum name="enum_name_one" value="0"/>
....
<enum name="enum_name_n" value="666"/>
</attr>
</declare-styleable>
layout.xml
<com.xyz.views.IconView
android:id="@+id/heart_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="enum_name_x"/>
Lo que necesito es algo como: mCustomView.setIcon(R.id.enum_name_x);
Pero no puedo encontrar la enumeración o incluso no tengo idea de cómo puedo obtener la enumeración o los nombres de la enumeración.
fuente
int
. Steve Moretz lo tiene. Me siento tonto por no verlo, pero son las 4:30 AM . Hora de dormir ...Bueno, por el bien de la cordura. Asegúrese de que sus ordinales sean los mismos en su estilo declarado que en su declaración Enum y acceda a él como una matriz.
fuente
Permítanme agregar una solución escrita en kotlin. Agregue la función de extensión en línea:
Ahora obtener enum es simple:
fuente
Sé que ha pasado un tiempo desde que se publicó la pregunta, pero tuve el mismo problema recientemente. Hackeé un poco de algo que usa JavaPoet de Square y algunas cosas en build.gradle que crea automáticamente una clase de enumeración de Java desde attrs.xml en la construcción del proyecto.
Hay una pequeña demostración y un archivo Léame con una explicación en https://github.com/afterecho/create_enum_from_xml
Espero eso ayude.
fuente