【问题标题】:How to make custom windowBackground theme style work on all Android devices?如何使自定义 windowBackground 主题样式适用于所有 Android 设备?
【发布时间】:2014-06-05 21:07:11
【问题描述】:

我正在尝试让我的所有活动都具有应如下所示的自定义主题样式:

此主题适用于许多设备,包括 Nexus 7、三星 Galaxy S4 和三星 Droid Charge(运行 Gingerbread)。但是,在其他设备上,例如 HP Slate 7 和 Motorola Droid RAZR,它最终看起来像这样:

我的AndroidManifest.xml 的application 标签中有以下内容:

android:theme="@style/AppTheme"

res/values/styles.xml中的主题如下:

<style name="AppBaseTheme" parent="@android:style/Theme.Light.NoTitleBar">

</style>

<style name="AppTheme" parent="@style/AppBaseTheme">
    <item name="android:windowBackground">@color/background</item>
</style>

我还在res/values-v11 下添加了styles.xml。以下是适用的样式:

<style name="AppBaseTheme" parent="@android:style/Theme.Holo.Light.NoActionBar">
</style>

最后,这出现在styles.xmlres/values-v14下:

<style name="AppBaseTheme" parent="@android:style/Theme.DeviceDefault.Light">
</style>

我尝试为每个活动定义主题并手动使用onCreate() 中的setTheme() 函数,但没有任何效果。我还尝试在每个Activity 中手动设置背景,但这也不起作用。我可以做些什么来解决我的问题?

编辑:有趣的是在样式中设置android:background 可以使其工作,但是不应该有背景的元素也会收到该背景颜色。

【问题讨论】:

    标签: android android-layout android-activity android-manifest android-styles


    【解决方案1】:

    解决问题的关键是将主题中的android:windowBackground更改为以下内容:

    <item name="android:windowBackground">@drawable/default_background</item>
    

    请注意,我不再使用@color,而只是使用@drawable,其 xml 如下:

    <?xml version="1.0" encoding="utf-8"?>
    
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
        <solid android:color="@color/background"/>
    </shape>
    

    似乎有些设备不支持接受此元素的颜色。

    【讨论】:

    • 我有一个运行 4.1 的 S2,它似乎会从我的 colors.xml 中随机选择一种颜色作为窗口背景。该解决方案为我修复了它。我希望我知道它为什么坏了!
    【解决方案2】:

    我发现最新版本的 Android Studio 期望样式的父级需要是 Theme.AppCompat。此外,在 values 目录中创建一个 colors.xml 文件也是一种很好的风格(在资源标签之间使用命名的颜色元素)。将您的 RGB 值作为命名颜色元素的值。使用 @color/ 在您的样式中引用它们。

    <!--colors.xml in values folder-->
    <resources>
        <color name="color1">#ffb62a23</color>
        <color name="color2">#ffedeba6</color>
        <color name="color3">#00ff00</color>
    </resources>
    
    <!--style tags -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowBackground">@color/color2</item>
        <item name="android:textColorPrimary">@color/color1</item>
        <item name="android:textColorSecondary">@color/color2</item>
        <item name="android:textColorTertiary">@color/color3</item>
    </style>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-11
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多