【问题标题】:Android Studio - Layout Theme Selection -- Where is this data stored?Android Studio - 布局主题选择 - 这些数据存储在哪里?
【发布时间】:2018-03-22 03:49:05
【问题描述】:

我对 Android 布局非常熟悉,而且您可以在清单中声明应用范围的主题,也可以通过样式资源(例如 "Halo""Material" 等)间接声明......

我也知道样式可以在每个布局的基础上完成。 Android Studio“布局编辑器”甚至允许您为布局选择主题。

问题:

每个布局应用时所选主题存储在哪里?


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

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

但是,当我选择不同的主题时,即使在我编译并运行应用程序之后,我也看不到清单、相应的布局或 Activity 子类的变化。

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

【问题讨论】:

    标签: android android-layout android-theme


    【解决方案1】:

    tl;dr

    AndroidManifest.xml 引用 styles.xml,后者又引用 colors.xml。布局编辑器修改了styles.xml,您没有看到结果,因为styles.xml 中的可能覆盖。

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


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

    从一个新的“空活动”开始,您将在 AndroidManifest.xml 文件中看到以下内容:android:theme="@style/AppTheme"。这与您当前活动的“设计视图”中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 链接或点击Open Editor 以获得不同主题的可视化表示。

    显示如下:

    【讨论】:

    • 感谢您的回复。我发现当我在所见即所得编辑器中更改活动的父主题时,没有任何资源文件被更改。这似乎只是为了演示的好处。我知道可以通过转到活动清单条目并使用主题属性来手动强制布局的父主题。 Android Studio 不会修改它,styles.xml 也不会。还是我遗漏了一些明显的东西?
    • 你是对的,它不会修改那些,因为它们被用户覆盖了。我相信他们的 Material Design 强化了这个概念。
    【解决方案2】:

    我相信这个问题的答案是,当你在预览中选择布局时,Android Studio 目前不会修改任何东西,它只是一个预览,就是这样。

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

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 2014-08-11
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      相关资源
      最近更新 更多