Android在状态栏后面绘制但不在导航栏后面

时间:2015-10-26 20:15:50

标签: android android-6.0-marshmallow

我正在研究状态栏是否完全透明,而不是半透明的方式,以及导航栏保持不变的方式。

我能得到的最近的就是使用旗帜

WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

但这也是导航栏的背后。

背景是使这个变得棘手,它是一个微妙的渐变,当我将状态栏颜色设置为渐变的开始时,它看起来几乎正确,但在屏幕顶部有一条微妙的线条。

是否有一种很好的方法让活动适合窗口,只在顶部,但如果底部有导航栏,请不要管它?

1 个答案:

答案 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