Как выбрать мою тему в превью макета Android Studio - PullRequest
0 голосов
/ 13 марта 2019

В каталоге res/values моего проекта у меня есть файл my_themes.xml, в котором указаны пользовательские атрибуты и две пользовательских темы (светлая и темная).Эти темы применяются (в коде) к Presentation объектам посредством третьего параметра конструктора .

Я хотел бы иметь возможность выбрать любой из моихдве темы, когда я редактирую файлы макета и вижу тематические результаты в предварительном просмотре макета.Когда я запускаю код, все работает нормально;это всего лишь вопрос о том, как получить предварительный просмотр макета, чтобы показать мне мою тему.

Однако не представляется возможным выбрать мои собственные темы.Когда я нажимаю раскрывающийся список, чтобы выбрать тему для использования, отображаются только мои «по умолчанию» AppTheme (и его родители):

enter image description here

ЕслиЯ нажимаю «Дополнительные темы ...», мои пользовательские темы не входят в число вариантов.Здесь я ищу «Мои» (они MyLightTheme и MyDarkTheme), но я получаю нулевые результаты:

enter image description here


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
            }
    }
}

1 Ответ

0 голосов
/ 18 июля 2019

Мне не удалось найти способ отображения моих тем в выпадающем меню, упомянутом в моем вопросе, но я смог обойти эту проблему, добавив атрибут tools:theme в корневой вид макета .

Например:

tools:theme="@style/MyLightTheme"

Затем, независимо от того, какая тема выбрана в раскрывающемся списке, предварительный просмотр макета будет использовать указанную тему.

...