如何使自定义windowBackground主题样式适用于所有Android设备?

时间:2014-04-21 18:35:33

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

我试图让我的所有活动都有一个自定义主题样式,如下所示:

good

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

bad

我的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>

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

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

最后,这会显示在styles.xml下的res/values-v14

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

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

编辑:有趣的是在样式中设置android:background使它有效,但是那些不应该有背景的元素也会收到背景颜色。

2 个答案:

答案 0 :(得分:14)

解决问题的关键是将主题中的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>

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

答案 1 :(得分: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>