如何在Android Studio布局预览中选择我的主题

时间:2019-03-13 18:34:12

标签: android android-studio android-theme

在项目的res/values目录中,有一个my_themes.xml文件,用于指定自定义属性和两个自定义主题(浅色和深色)。这些主题通过Presentation的方式(以代码形式)应用于the third constructor parameter对象。

在编辑布局文件时,我希望能够选择两个主题之一,并在布局预览中查看主题结果。当我运行代码时,一切正常。这只是有关如何获取布局预览以向我展示主题的问题。

但是,似乎无法选择我的自定义主题。当我单击下拉列表以选择要使用的主题时,只有我的“默认” AppTheme(及其父项)可见:

enter image description here

如果我单击“更多主题...”,则我的自定义主题不在选项中。在这里,我正在搜索“我的”(它们是MyLightThemeMyDarkTheme),但结果为零:

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 :(得分:0)

我一直无法找到使主题出现在问题中提到的下拉菜单中的方法,但是我可以通过将CSRF属性添加到问题的根视图中来解决此问题。布局。

例如:

tools:theme

然后,无论在下拉菜单中选择了什么主题,布局预览都将使用指定的主题。