我在游戏商店中有一个应用: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,则状态栏即使是黑暗主题也会保持灰色。
答案 0 :(得分:0)
由于这只适用于Lollipop,我使用自定义属性修复它以根据主题设置背景。
对于状态栏颜色,我使用了
。getWindow()setStatusBarColor(getResources()的getColor());