Android Studio - 布局主题选择 -- 此数据存储在哪里?

Android Studio - Layout Theme Selection -- Where is this data stored?

我非常熟悉 Android 布局以及您可以在清单中或间接通过 "Halo""Material" 等样式资源声明应用范围主题这一事实等等……

我也知道样式可以在每个布局的基础上完成。 Android Studio "Layout Editor" 甚至允许您 select 为布局设计一个主题。

问题:

按布局应用时 selected 主题存储在哪里?


Android Documentation 似乎表明它在声明活动的清单中。例如:

<activity android:name=".MainMenu"  `android:theme="@android:style/Theme.Holo.NoActionBar"/>`

然而,当我 select 一个不同的主题时,即使在我编译和 运行 应用程序之后,我也没有看到清单或相应布局或 Activity 子class。

那么布局和为其存储的所选主题之间的关联在哪里?

tl;dr

AndroidManifest.xml 引用 styles.xml,后者又引用 colors.xml。布局编辑器修改 styles.xml,您 看到结果,因为 styles.xml.

中可能有覆盖

-- 修改 styles.xml 中的父样式并删除其中不需要的覆盖。 --


在调查了这个问题之后,我也遇到了这个问题,这是我得出的结论:

从新的 "Empty Activity" 开始,您将在 AndroidManifest.xml 文件中看到以下内容:android:theme="@style/AppTheme"。这与您当前 activity 的 "Design View" 中 Layout Editor 的变化没有直接关系。

AndroidManifest.xml

将鼠标悬停在主题定义上,您将看到以下内容:

styles.xml

点击它将带我们到 styles.xml。默认情况下,您将看到以下内容:

这是 AppTheme 的来源,在 AndroidManifest.xml 中被引用。如您所见,Theme.AppCompat.Light.DarkActionBar 是父样式,如果您想更改整体主题,则需要修改它,例如"@android:style/Theme.Material""@android:style/Theme.Holo".

值得注意的是,只要覆盖颜色仍然存在,您就不会在应用启动时注意到太多变化,即使这些变化确实发生了。

要查看更改,请推荐以下行:

    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

通过删除或评论:

<!--        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>-->

主题布局编辑器

出于某种原因 Android Studio 2.2 去掉了布局上的刷新按钮,导致样式更新时遇到很多困难。

目前,手动覆盖 styles.xml 中的父样式并删除从 colors.xml 导入的任何覆盖。不理想,但这是一个解决方案。

有关主题的完整列表,您可以查看此开发人员 R.style link 或单击 Open Editor 以直观地显示不同的主题。

显示以下内容:

我相信这个问题的答案是 Android 当您在预览中 select 布局时,Studio 当前不会修改任何内容,它只是预览而已。

要进行更改,必须手动编辑清单中 activity 条目的主题。