我正在研究状态栏是否完全透明,而不是半透明的方式,以及导航栏保持不变的方式。
我能得到的最近的就是使用旗帜
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
但这也是导航栏的背后。
背景是使这个变得棘手,它是一个微妙的渐变,当我将状态栏颜色设置为渐变的开始时,它看起来几乎正确,但在屏幕顶部有一条微妙的线条。
是否有一种很好的方法让活动适合窗口,只在顶部,但如果底部有导航栏,请不要管它?
答案 0 :(得分:14)
一个好的方法是来自this answer的方法一。
要实现完全透明的状态栏,您必须使用 statusBarColor ,仅适用于API 21及更高版本。 API 19及更高版本提供了 windowTranslucentStatus ,但它为状态栏添加了有色背景。但是,设定 windowTranslucentStatus 确实实现了将 statusBarColor 更改为透明的一件事:它设置SYSTEM_UI_FLAG_LAYOUT_STABLE和SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 标志。获得相同效果的最简单方法是手动设置这些 flags,有效地禁用Android强加的插件 布局系统,让你自己照顾。
您在onCreate方法中调用此行:
getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
请务必在/res/values-v21/styles.xml中设置透明度:
<item name="android:statusBarColor">@android:color/transparent</item>
或以编程方式设置透明度:
getWindow().setStatusBarColor(Color.TRANSPARENT);
这种方法的好处在于相同的布局和设计 也可以通过交易透明状态栏在API 19上使用 用于有色半透明状态栏。
<item name="android:windowTranslucentStatus">true</item>
我猜你已经尝试了这个或类似的东西。如果这不起作用,请确保您的根元素是FrameLayout
。