【问题标题】:How to change the status bar notification icons' color/tint in android (marshmallow and above 23+)?如何在android(棉花糖及23岁以上)中更改状态栏通知图标的颜色/色调?
【发布时间】:2015-10-24 09:38:08
【问题描述】:

正如标题所说,如何将状态栏图标的颜色更改为深色调而不是默认的白色。

来自

【问题讨论】:

    标签: android android-6.0-marshmallow


    【解决方案1】:

    要使状态栏图标具有深色而不是默认的白色,请在您的 styles.xml(或更准确地说是在 values-v23/styles.xml)文件中添加以下标签:

    <item name="android:windowLightStatusBar" tools:targetApi="23">true</item>
    

    您还可以在运行时更改标志,方法是将其设置为任何View

    View yourView = findViewById(R.id.your_view);
    
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (yourView != null) {
            yourView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        }
    }
    

    如果要重置更改,请像这样清除标志:

    yourView.setSystemUiVisibility(0);
    

    【讨论】:

    • 如果你用程序化的方式设置浅色状态栏,有没有办法把它改回普通的深色版本?
    • 如果这不起作用,您可以尝试重新创建设置标志的View itslef。对我来说,我只是在更改偏好时重新创建一个Fragment
    • true
    • 将其改回黑暗:rootView.setSystemUiVisibility(rootView.getSystemUiVisibility() &amp; ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); 不幸的是,这对我来说会导致明显的重绘闪烁,对此表示赞赏。
    • 为什么在视图上调用这个方法?在这种情况下 yourView 是什么?有人有任何见解吗?
    【解决方案2】:

    下面是示例代码,在纵向和横向之间切换时更改状态栏颜色。纵向模式:灯条,深色图标;横向模式:暗条,亮图标;主题:“Theme.AppCompat.Light”

        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
            Window window = getWindow();
            View decorView = window.getDecorView();
            if(Configuration.ORIENTATION_LANDSCAPE == newConfig.orientation) {
                decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    window.setStatusBarColor(Color.parseColor("#55000000")); // set dark color, the icon will auto change light
                }
            } else {
                decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    window.setStatusBarColor(Color.parseColor("#fffafafa"));
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-28
      • 2017-08-16
      • 2018-02-18
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      相关资源
      最近更新 更多