Eu criei um modo de exibição personalizado (encontre-o aqui ) com um atributo declarável de estilo do tipo enum. Em xml, agora posso escolher uma das entradas de enum para meu atributo personalizado. Agora, quero criar um método para definir esse valor programaticamente, mas não consigo acessar o enum.
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"/>
O que eu preciso é algo como: mCustomView.setIcon(R.id.enum_name_x);
Mas não consigo encontrar o enum ou nem mesmo tenho ideia de como posso obter o enum ou os nomes do enum.
fonte
int
. Steve Moretz tem. Me sinto idiota por não ter visto, mas são 4h30 . Hora de dormir ...Bem, pelo bem da sanidade. Certifique-se de que seus ordinais sejam os mesmos em seu estilo declarado e em sua declaração Enum e acesse-os como uma matriz.
fonte
Deixe-me adicionar uma solução escrita em kotlin. Adicionar função de extensão inline:
Agora, obter enum é simples:
fonte
Sei que já faz um tempo que a pergunta foi postada, mas tive o mesmo problema recentemente. Eu hackeei uma coisinha que usa JavaPoet do Square e algumas coisas no build.gradle que cria automaticamente uma classe de enum Java a partir do attrs.xml na construção do projeto.
Há uma pequena demonstração e um leia-me com uma explicação em https://github.com/afterecho/create_enum_from_xml
Espero que ajude.
fonte