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

4
我正在开发一个应用程序,状态栏现在是白色的。我的布局没有什么特别的地方。如何让状态栏显示为“正常”(黑色背景白色图标)?以下是我的布局:screen shot
 <?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 文件吗? - azizbekian
将样式设置为全屏,然后添加fitsystemwindows = true并将背景颜色设置为父视图。 - Ashish John
4个回答

21

我在这里找到了答案:

状态栏是白色的

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

你会在 values/styles/styles.xml(v21) 文件中看到那一行代码。删除它就可以解决这个问题。


那对我有效! - Lcukerd
为什么这会是默认值?谢谢! - 7200rpm
你是个天才。节省了我的时间。解决方案有效! - O Thạnh Ldt

0
状态栏的颜色取决于您在styles.xml文件中找到的colorPrimaryDark的值。
或者,您可以像这样设置颜色:setStatusBarColor()在这里您可以找到更多信息。

0

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


0

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

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

Android Lollipop带来了在应用程序中更改状态栏颜色的能力,以实现更沉浸式的用户体验,并符合Google的Material Design准则。以下是使用API级别21中引入的new 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));

附注: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对象并设置了其背景颜色。

参考:

如何在Android中更改状态栏颜色

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接