状态栏在工具栏上方是白色的[重复]
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 从白色更改为你想要的任何其他颜色。
【讨论】:
以上是关于状态栏在工具栏上方是白色的[重复]的主要内容,如果未能解决你的问题,请参考以下文章