Ich habe eine benutzerdefinierte Ansicht ( hier zu finden ) mit einem deklarierbaren Attribut vom Typ enum erstellt. In XML kann ich jetzt einen der Aufzählungseinträge für mein benutzerdefiniertes Attribut auswählen. Jetzt möchte ich eine Methode erstellen, um diesen Wert programmgesteuert festzulegen, kann jedoch nicht auf die Aufzählung zugreifen.
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"/>
Was ich brauche ist so etwas wie: mCustomView.setIcon(R.id.enum_name_x);
Aber ich kann die Aufzählung nicht finden oder ich habe sogar keine Ahnung, wie ich die Aufzählung oder die Namen der Aufzählung bekommen kann.
quelle
int
. Steve Moretz hat es. Ich fühle mich dumm, es nicht zu sehen, aber es ist 4:30 Uhr . Zeit fürs Bett ...Gut um der Vernunft willen. Stellen Sie sicher, dass Ihre Ordnungszahlen in Ihrem deklarierten Stil identisch sind wie in Ihrer Enum-Deklaration, und greifen Sie als Array darauf zu.
quelle
Lassen Sie mich eine in Kotlin geschriebene Lösung hinzufügen. Inline-Erweiterungsfunktion hinzufügen:
Jetzt ist es einfach, eine Aufzählung zu erhalten:
quelle
Ich weiß, dass es eine Weile her ist, seit die Frage veröffentlicht wurde, aber ich hatte kürzlich das gleiche Problem. Ich habe etwas zusammen gehackt, das JavaPoet von Square und einige Dinge in build.gradle verwendet, die beim Erstellen eines Projekts automatisch eine Java-Enum-Klasse aus attrs.xml erstellen.
Es gibt eine kleine Demo und eine Readme-Datei mit einer Erklärung unter https://github.com/afterecho/create_enum_from_xml
Ich hoffe es hilft.
quelle