我在我的应用程序AppTheme和DarkTheme中设置了两个主题
在我的Apptheme状态栏中显示正确,但是当我设置DarkTheme时,其状态栏颜色已更改,但字体颜色未更改,我想在DarkTheme中将状态栏字体颜色更改为白色。
当我在活动中使用片段时,例如MainFragment在MainActivity中使用时,我的状态栏颜色不是白色
当我使用“仅活动”时,它会在状态栏中以白色字体显示相同主题的正确结果。
Style.xml
<style name="DarkTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimaryD</item>
<item name="colorPrimaryDark">@color/color_82828C</item>
<item name="colorAccent">@color/color_f85200</item>
<item name="color_background">@color/color_background_night_light_black</item>
<item name="color_background_d">@color/color_background_night_dark_black</item>
<item name="color_icon">@color/color_icon_ffffff</item>
<item name="color_black_white">@color/colorWhite</item>
<item name="color_catlist_bg">@color/color_background_night_dark_black</item>
<item name="color_icon_border">@color/color_icon_border_night</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="colorControlHighlight">@color/ripple_colorD</item>
<item name="android:windowDisablePreview">true</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="color_background">@color/color_background_day</item>
<item name="color_background_d">@color/colorWhite</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/color_f85200</item>
<item name="color_icon">@color/color_icon_3b3b3b</item>
<item name="color_black_white">@color/colorBlack</item>
<item name="color_catlist_bg">@color/colorWhite</item>
<item name="color_icon_border">@color/color_icon_border_day</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="colorControlHighlight">@color/ripple_color</item>
<item name="android:windowDisablePreview">true</item>
</style>
[1)应用状态栏正确
[2) DarkTheme Statusbar字体颜色为黑色,我想要白色字体
我已应用很多解决方案,但不适用于我的情况
HomeActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.DarkTheme);
setContentView(R.layout.activity_home);
}
带有片段的活动的问题,没有片段状态栏字体颜色为白色的作品。
[如果有人有任何解决方案,请给我一个建议,如果就我的情况而言,我也在答案上标上了正确的位置。
提前感谢。
如果使用此功能将状态栏字体颜色更改为白色,则>
对于Java,
public static void setLightStatusBar(Activity activity){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int flags = activity.getWindow().getDecorView().getSystemUiVisibility(); flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; activity.getWindow().getDecorView().setSystemUiVisibility(flags); } }
供kotlin使用此扩展功能,
fun Activity.setLightStatusBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { var flags = window.decorView.systemUiVisibility flags = flags and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() window.decorView.systemUiVisibility = flags } }
如果要清除指示灯状态栏并恢复到以前的状态,请使用此功能,
对于Java,
public static void clearLightStatusBar(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Window window = activity.getWindow(); window.setStatusBarColor(ContextCompat .getColor(activity, R.color.colorPrimaryDark)); } }
对于Kotlin,
fun Activity.clearLightStatusBar() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
window.statusBarColor = ContextCompat
.getColor(this, R.color.colorPrimaryDark)
}
}
[我强烈建议您检查this以实现完美的组合浅色/深色主题。 Google本身有一个完整的例子。
注意:API级别21以下不支持状态栏着色。