当前位置: 首页 > 知识库问答 >
问题:

android中状态栏字体颜色不随碎片深色主题而改变

邢飞白
2023-03-14

我在我的应用程序中设置了两个主题应用主题

在我的应用主题状态栏是显示正确的,但当我设置DarkThem它改变状态栏颜色,但字体颜色没有改变,我想改变我的状态栏字体颜色白色在DarkTh的。

当我在活动中使用片段时,就像在主活动中使用主片段一样,当时我的状态栏颜色不是白色

当我使用“仅活动”时,它会在状态栏中以白色字体颜色显示相同主题的正确结果。

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) Apptheme状态栏是正确的

2)深色主题状态条字体颜色为黑色,我想要白色字体

我Alredy应用了许多解决方案,但在我的情况下无效

HomeActivity.java

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

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

如果有人有任何解决方案,那么给我一个建议,如果在我的情况下,它的工作,我也正确标记的答案。

提前感谢。

共有3个答案

沃阳曜
2023-03-14

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

对于API 21及以上21

你可以通过设置android: statusBar颜色或android:颜色Primary黑暗的样式属性,你正在使用你的应用程序在styles.xml.

(android:statusBarColor默认继承android:colorPrimaryDark的值)

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/your_custom_color</item>
</style>

在 API 级别 21 上,您还可以从代码中使用 Window.setStatusBarColor() 方法。

// getWindow() is a method of Activity
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

希望这有什么帮助。

年健
2023-03-14

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

我不知道为什么要在主题之间切换,因为我们可以使用<code>夜间/颜色,所以现在不再需要DarkTheme风格。xml和night/styles.xml。在这两种情况下,您都可以覆盖灯光主题的资源。过来看。

黄鸣
2023-03-14

如果您更改状态栏字体颜色为白色,请使用此功能,

对于爪哇,

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
    }
}

如果您想清除灯光状态栏并恢复到以前的状态,请使用此功能

对于爪哇,

 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)
    }
}
 类似资料:
  • 有没有办法在暗色主题的PWA状态栏上设置白色背景? 在index.html中,我放置了元标记:

  • 我试图在我的应用中使用材料设计,为了使用浮动操作按钮,我使用了appcompat-v7库。但是,为了使用这个,我必须使用主题:“theme.appcompat.light”。我只是不能为API22设置应用程序的背景色。我对在API的20或贝娄上工作不感兴趣 我的主要活动:

  • 本文向大家介绍Android系统更改状态栏字体颜色,包括了Android系统更改状态栏字体颜色的使用技巧和注意事项,需要的朋友参考一下 随着时代的发展,Android的状态栏都不是乌黑一片了,在Android4.4之后我们可以修改状态栏的颜色或者让我们自己的View延伸到状态栏下面。我们可以进行更多的定制化了,然而有的时候我们使用的是淡色的颜色比如白色,由于状态栏上面的文字为白色,这样的话状态栏上

  • 如果你认为它重复了一些其他的问题,那么我应该让你现在我已经尝试了3,4页的谷歌搜索,也实现了他们。

  • 我正在开发一个简单的应用程序来测试材料设计。我正在使用,我的活动如下所示: 布局定义为: 我想改变Android5前的状态栏颜色,并将其设置为,但我找不到方法。我试着用: 但是setStatusBar颜色可以从第21级开始使用。为什么如果我在主题中定义并使用appcompact,状态栏不会改变颜色?有人能帮忙吗?

  • 状态栏文字颜色 sdk状态栏文字的颜色可以设置为白色或者黑色 , 设置方法如下: /** @param isDark true为黑字模式, false为白色模式 */ Ntalker.getInstance().statusBarDarkMode(boolean isDark);