在清单中更改默认主题

时间:2014-11-20 15:46:43

标签: android android-activity android-manifest android-theme

我在游戏商店中有一个应用:Just Notes

我最近在应用中添加了主题。 问题是,状态栏颜色和默认背景颜色始终默认为清单中提到的主题。

所有其他主题都有colorPrimaryDark,但Android并没有使用它来在运行时设置状态栏颜色。

如何正确覆盖清单中提到的主题

例如。 以下是我的样式

<style name="AppBaseThemeDark" parent="Theme.AppCompat">
    <item name="colorPrimary">@color/primary_material_dark</item>
    <item name="colorPrimaryDark">@color/primary_dark_material_dark</item>
  <item name="colorAccent">@color/accent_material_dark</item>
  <item name="android:textColor">@color/abc_primary_text_material_dark</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

<style name="AppBaseThemeLight" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/primary_material_light</item>
    <item name="colorPrimaryDark">@color/primary_dark_material_light</item>
    <item name="colorAccent">@color/accent_material_light</item>
    <item name="android:textColor">@color/abc_primary_text_material_light</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

以下是我的清单

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppThemeDark" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

清单的应用主题设置为黑暗。

在我的活动中,这是我如何根据共享首页中保存的内容设置主题。

switch (mPrefs.getInt("theme", -1)) {
    case 0:
        setTheme(R.style.AppThemeDark);
        break;
    case 1:
        setTheme(R.style.AppThemeLight);
        break;
    default:
        //keep the theme from the manifest.
}

如果用户选择了灯光主题,则状态栏仍然保持黑色和背景。

如果我将清单中的主题更改为AppBaseThemeLight,则状态栏即使是黑暗主题也会保持灰色。

1 个答案:

答案 0 :(得分:0)

由于这只适用于Lollipop,我使用自定义属性修复它以根据主题设置背景。

对于状态栏颜色,我使用了

  。

getWindow()setStatusBarColor(getResources()的getColor());