Как заставить пользовательский стиль темы windowBackground работать на всех устройствах Android?

Я пытаюсь, чтобы все мои действия имели собственный стиль темы, который должен выглядеть так:

хорошо

Эта тема работает на многих устройствах, включая Nexus 7, Samsung Galaxy S4 и Samsung Droid Charge (под управлением Gingerbread). Однако на других устройствах, таких как HP Slate 7 и Motorola Droid RAZR, это выглядит так:

плохо

В теге application моего AndroidManifest.xml есть следующее:

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)


Ключом к решению проблемы было изменение 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>

Кажется, что некоторые устройства не поддерживают принятие цвета для этого элемента.

person BVB    schedule 21.04.2014
comment
У меня был S2 под управлением 4.1, который, казалось бы, случайным образом выбирал цвет из моего colors.xml для фона окна. Это решение исправило это для меня. Я хотел бы знать, почему он был сломан, хотя! - person Tom; 15.06.2016

Я обнаружил, что последняя версия Android Studio ожидает, что родителем для стиля должен быть Theme.AppCompat. Кроме того, рекомендуется создать файл 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>
person Jeff Holloway    schedule 15.08.2015