Как получить доступный ресурс из логического ресурса

Есть ли способ получить доступный ресурс из логического ресурса?

Например:

bools.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="use_version_1_drawables">true</bool>
</resources>

my_drawable.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/my_drawable_version_1"/>
    <item android:drawable="@drawable/my_drawable_version_2"/>
</selector>

Есть ли конкретное состояние, которое я должен использовать, потому что, насколько я понимаю, все они связаны с конкретными событиями (проверка, фокусировка и т. д.). Возможно, мне не следует использовать селектор. Я просто хочу иметь один ресурс, к которому я могу обратиться, который на самом деле связан с двумя другими, но я выберу один на основе моего логического значения.


person Kent J.    schedule 17.01.2020    source источник
comment
Каким образом вы планируете изменить значение use_version_1_drawables?   -  person art    schedule 17.01.2020
comment
@art Я пишу модуль, поэтому я рассчитываю, что при использовании модуля все, что вам нужно сделать, это добавить логическое значение с идентификатором user_version_1_drawables и установить для него все, что вы хотите.   -  person Kent J.    schedule 17.01.2020
comment
Вы можете использовать массивы (в xml) доступных идентификаторов. Каждый массив будет иметь две записи: позиция 0 для false и позиция 1 для true. См., например, этот пост, чтобы узнать, как получить фактические чертежи   -  person Bö macht Blau    schedule 18.01.2020


Ответы (1)


Вы находитесь рядом. Вы можете думать о селекторе как об операторе if/else. Чего вам сейчас не хватает, так это вашего фактического состояния. Вот пример:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="?attr/colorPrimaryDark" android:state_checked="true" />
    <item android:color="@color/gray" android:state_checked="false" />
</selector>

Если вы используете его с чем-то вроде флажка, просто установите этот селектор в качестве ресурса для рисования флажка, и state_checked будет обновляться автоматически.

РЕДАКТИРОВАТЬ: проблема была немного сложнее и решена в комментариях.

person Khodor    schedule 17.01.2020
comment
На самом деле я использую drawable в качестве значка для элемента навигации, поэтому состояние android:state_checked у меня не работает. Я не хочу менять рисуемый объект на основе проверенного состояния, а вместо этого хочу просто использовать либо или на основе моего логического значения. - person Kent J.; 17.01.2020
comment
Является ли это представление созданным вами пользовательским классом? Или это из какого-то навигационного компонента? - person Khodor; 17.01.2020
comment
Это только для значков в меню. Меню используется для нижнего вида навигации. - person Kent J.; 17.01.2020
comment
Хм. Я что-нибудь придумаю. Лучшее, что я могу сейчас придумать, это раздувание разных меню в зависимости от этого логического значения, но это просто не кажется правильным. - person Khodor; 17.01.2020
comment
Да, это то, чего я пытаюсь избежать. - person Kent J.; 17.01.2020
comment
Не может быть и речи об определении его как атрибута темы? - person Khodor; 17.01.2020
comment
Я не рассматривал это раньше. Я создал несколько настраиваемых атрибутов для своих рисунков, а затем настроил две темы приложения (одну для первой версии и одну для второй), и все работает именно так, как ожидалось. - person Kent J.; 17.01.2020
comment
Да, именно об этом я и думал. :) - person Khodor; 18.01.2020