Я создал настраиваемый View (его можно найти здесь ) с атрибутом declare-styleable типа enum. В xml теперь я могу выбрать одну из записей перечисления для моего настраиваемого атрибута. Теперь я хочу создать метод для установки этого значения программно, но у меня нет доступа к перечислению.
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"/>
Мне нужно что-то вроде: mCustomView.setIcon(R.id.enum_name_x);
Но я не могу найти перечисление или даже не знаю, как мне получить перечисление или имена перечисления.
источник
int
. Он есть у Стива Моретца. Я чувствую себя глупо из-за того, что не вижу этого, но сейчас 4:30 утра . Пора спать ...Ну, ради здравого смысла. Убедитесь, что ваши порядковые номера в объявленном вами styleable совпадают с объявлением Enum, и обращайтесь к нему как к массиву.
источник
Разрешите добавить решение, написанное на котлине. Добавить встроенную функцию расширения:
Теперь получить enum просто:
источник
Я знаю, что прошло некоторое время с момента публикации вопроса, но недавно у меня была такая же проблема. Я вместе взломал кое-что, что использует Square JavaPoet и кое-что из build.gradle, которое автоматически создает класс перечисления Java из attrs.xml при сборке проекта.
На https://github.com/afterecho/create_enum_from_xml есть небольшая демонстрация и файл readme с объяснением.
Надеюсь, поможет.
источник