Statusbar字体颜色不会随着片段Darktheme在android中改变

问题描述 投票:4回答:3

我在我的应用程序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)应用状态栏正确

enter image description here

[2) DarkTheme Statusbar字体颜色为黑色,我想要白色字体

enter image description here

我已应用很多解决方案,但不适用于我的情况

HomeActivity.java

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(R.style.DarkTheme); 
        setContentView(R.layout.activity_home);
}

带有片段的活动的问题,没有片段状态栏字体颜色为白色的作品。

[如果有人有任何解决方案,请给我一个建议,如果就我的情况而言,我也在答案上标上了正确的位置。

提前感谢。

android android-fragments statusbar
3个回答
0
投票

如果使用此功能将状态栏字体颜色更改为白色,则>

对于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)
    }
}

0
投票

[我强烈建议您检查this以实现完美的组合浅色/深色主题。 Google本身有一个完整的例子。


0
投票

注意:API级别21以下不支持状态栏着色。

© www.soinside.com 2019 - 2024. All rights reserved.