【问题标题】:The status bar is white above toolbar [duplicate]状态栏在工具栏上方是白色的[重复]
【发布时间】:2018-04-11 18:22:22
【问题描述】:

我正在做一个应用程序,状态栏现在是白色的。我没有对布局做任何花哨的事情。如何让状态栏显示为“正常”(白色图标会变暗)。 .

这是我的布局:

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
   android:id="@+id/container_toolbar"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:orientation="vertical"
   xmlns:android="http://schemas.android.com/apk/res/android">

<include
    android:id="@+id/toolbar"
    layout="@layout/toolbar" />

 <include layout="@layout/content_movie_detail" />

</LinearLayout>

工具栏:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar 
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:local="http://schemas.android.com/apk/res-auto"
  android:id="@+id/toolbar"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:minHeight="?attr/actionBarSize"
  android:background="@color/colorPrimary"
  local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
  local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_movie_detail);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    actionBar = getSupportActionBar();

    try {
        assert actionBar != null;
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayShowTitleEnabled(true);
    } catch (Exception ignored) {
        Log.e(TAG,ignored.toString());
    }

}

我错过了什么?

【问题讨论】:

  • 你能分享styles.xml吗?
  • 使用样式全屏,然后添加 fitsystemwindows = true 并设置背景颜色到你的父视图。

标签: android android-layout statusbar


【解决方案1】:

我在这里找到了答案:

Status bar is white

<item name="android:statusBarColor">@android:color/transparent</item>

您将在 values/styles/styles.xml(v21) 中看到该行代码。删除它并解决问题

【讨论】:

  • 这对我有用!
  • 为什么这会是默认值?谢谢!
  • 你喜欢。节省我的时间。解决方案奏效了!
【解决方案2】:

状态栏的颜色取决于colorPrimaryDark 的值,该值可以在您的styles.xml 文件中找到。

您也可以像这样设置颜色:setStatusBarColor()Here你可以找到更多信息。

【讨论】:

    【解决方案3】:

    如前所述,有两种方法可以设置状态栏颜色。第一个是更改 values 文件夹中 colors.xml 上的 colorPrimaryDark。

    另一种设置状态栏颜色的方法是通过 Window 类编程:

    Android Lollipop 带来了更改应用中状态栏颜色的功能,以获得更加身临其境的用户体验,并符合 Google 的 Material Design 指南。以下是如何使用 API 级别 21 中引入的新 window.setStatusBarColor 方法更改状态栏的颜色。更改状态栏的颜色还需要在 Window 上设置两个附加标志;您需要添加 FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 标志并清除 FLAG_TRANSLUCENT_STATUS 标志。

    Window window = activity.getWindow();
    
    // clear FLAG_TRANSLUCENT_STATUS flag:
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
    // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    
    // finally change the color
    window.setStatusBarColor(activity.getResources().getColor(R.color.my_statusbar_color));
    

    P.S.:setStatusBarColor 方法适用于 android API 5.0 或更高版本。要将状态栏颜色从 KitKat 更改为以上,此代码块将起作用:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
        {
            Window w = context.getWindow();
            w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //status bar height
            int statusBarHeight = Utilities.getStatusBarHeight(context);
    
            View view = new View(context);
            view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            view.getLayoutParams().height = statusBarHeight;
            ((ViewGroup) w.getDecorView()).addView(view);
            view.setBackgroundColor(context.getResources().getColor(R.color.colorPrimaryTaskBar));
        }
    

    如您所见,它创建了一个 View 对象并将其设置为 backgroundColor。

    参考:

    How to change the status bar color in android

    http://www.dynamicguru.com/android/change-color-of-status-bar-in-android-apps-programmatically/

    【讨论】:

      【解决方案4】:

      我猜你的 colorPrimaryDark 在 style.xml 中是白色/透明的。将 style.xml 文件中的 colorPrimaryDark 从白色更改为你想要的任何其他颜色。

      【讨论】:

        猜你喜欢
        • 2018-03-03
        • 2014-11-26
        • 1970-01-01
        • 2019-01-11
        • 1970-01-01
        • 2011-02-20
        • 2015-05-02
        相关资源
        最近更新 更多