В каталоге res/values
моего проекта у меня есть файл my_themes.xml
, в котором указаны пользовательские атрибуты и две пользовательских темы (светлая и темная).Эти темы применяются (в коде) к Presentation
объектам посредством третьего параметра конструктора .
Я хотел бы иметь возможность выбрать любой из моихдве темы, когда я редактирую файлы макета и вижу тематические результаты в предварительном просмотре макета.Когда я запускаю код, все работает нормально;это всего лишь вопрос о том, как получить предварительный просмотр макета, чтобы показать мне мою тему.
Однако не представляется возможным выбрать мои собственные темы.Когда я нажимаю раскрывающийся список, чтобы выбрать тему для использования, отображаются только мои «по умолчанию» AppTheme
(и его родители):
![enter image description here](https://i.stack.imgur.com/PSCCs.png)
ЕслиЯ нажимаю «Дополнительные темы ...», мои пользовательские темы не входят в число вариантов.Здесь я ищу «Мои» (они MyLightTheme
и MyDarkTheme
), но я получаю нулевые результаты:
![enter image description here](https://i.stack.imgur.com/wesMH.png)
my_themes.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="MyCustomAttr" format="reference"/>
<attr name="MySecondCustomAttr" format="reference"/>
<style name="MyLightTheme" parent="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen">
<item name="MyCustomAttr">@drawable/light_thing</item>
<item name="MySecondCustomAttr">@drawable/second_light_thing</item>
</style>
<style name="MyDarkTheme" parent="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen">
<item name="MyCustomAttr">@drawable/dark_thing</item>
<item name="MySecondCustomAttr">@drawable/second_dark_thing</item>
</style>
</resources>
Тематический Presentation
подкласс:
open class MyThemedPresentation(outerContext: Context?, display: Display?, isLight: Boolean)
: Presentation(outerContext, display, getTheme(isLight)) {
companion object {
@StyleRes
@JvmStatic
fun getTheme(isLight: Boolean): Int =
when (isLight) {
true -> R.style.MyLightTheme
false -> R.style.MyDarkTheme
}
}
}