状态栏在工具栏上方是白色的

The status bar is white above toolbar

我正在做一个应用程序,状态栏现在是白色的。我没有对布局做任何花哨的事情。我怎样才能让状态栏显示为 "normal" (这将是黑暗的白色图标)。 .

这是我的布局:

 <?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" />

Activity:

@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());
    }

}

我错过了什么?

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

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

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

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

以编程方式

Android Lollipop brought with it the ability to change the color of status bar in your app for a more immersive user experience and in tune with Google’s Material Design Guidelines. Here is how you can change the color of the status bar using the new window.setStatusBarColor method introduced in API level 21. Changing the color of status bar also requires setting two additional flags on the Window; you need to add the FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag and clear the FLAG_TRANSLUCENT_STATUS flag.

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/

我在这里找到了答案:

Status bar is white

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

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

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