状态栏在工具栏上方是白色的[重复]

Posted

技术标签:

【中文标题】状态栏在工具栏上方是白色的[重复]【英文标题】: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_
   android:layout_
   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_
  android:layout_
  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 并设置背景颜色到你的父视图。 【参考方案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 从白色更改为你想要的任何其他颜色。

【讨论】:

以上是关于状态栏在工具栏上方是白色的[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 13 中使用 UISearchController 时,状态栏在 iOS 中变为白色

iOS 状态栏更改颜色

ipad浏览器全屏隐藏状态栏

Android透明状态栏在App中的实现与接口设计

Android透明状态栏在App中的实现与接口设计

Android透明状态栏在App中的实现与接口设计