如何创建一个完全透明的导航栏?

时间:2016-07-02 15:01:33

标签: android android-layout material-design

我想将导航栏完全透明,如下图所示。

我尝试了<item name="android:windowTranslucentNavigation">true</item>,但它并不完全透明(更像是50%)。

有解决方案吗?因为我没有发现它,但我看到一些使用它的应用程序,如Nova。甚至在googles指南https://material.google.com/layout/structure.html#structure-system-bars

中也是如此

Transparent Nav

5 个答案:

答案 0 :(得分:2)

在您的活动的onCreate中使用以下代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window w = getWindow(); w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
            }

并在你的styles.xml中:

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentNavigation">false</item>

答案 1 :(得分:1)

您可以使用FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS实现这一目标。文档说明:

  

表示此窗口负责绘制的标志   系统栏的背景。如果设置,则绘制系统条   透明背景和此窗口中的相应区域   填充getStatusBarColor()getNavigationBarColor()中指定的颜色   onCreate

在您的活动getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

中设置它
each[1] == '-'

答案 2 :(得分:0)

试试这个

<resources>
<style name="Theme" parent="android:Theme.Material.Wallpaper.NoTitleBar">
    <item name="android:navigationBarColor">@android:color/transparent</item>
    <item name="android:windowTranslucentNavigation">true</item>
</style>

答案 3 :(得分:0)

我受到Google Keep应用的启发,该应用具有类似如下所示的实现方式:

enter image description here

因此,我试图找到有关如何实现此目标的适当信息,但不幸的是没有找到任何东西,而且上述答案均无效。因此,我决定尝试与navigationBar Android Studio建议的所有标志。

让我详细解释一下:

  1. 在使用浅色主题时,只有android:navigationBarColor不会做任何事情。但是在黑暗主题下,它将起作用。

  2. windowTranslucentNavigation设置为true会做两件事:

    • 在活动导航栏下方绘制活动
    • 覆盖navigationBarColor并强制其透明。

下面的图片如下:

enter image description here

  1. 如果您使用FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS(按照@Frankenxtein的回答),则会得到以下结果:

enter image description here

这在某种程度上接近期望的结果,但这不是因为它在navbar下方绘制了活动组件。而且还会弄乱您的填充和边距(请参见完整屏幕截图here)。而且,您必须为每个活动执行此操作,还必须调整当前利润。

解决方案

这可以在不影响当前布局的情况下实现。要在Dark主题中执行此操作,就没有问题,只需设置android:navigationBarColor就可以完成。

不过,我们的目标是使用轻主题let(#FFFFFF)来实现。将android:windowLightNavigationBar与需要使用API​​ 27或更高版本的android:navigationBarColor一起使用,将得到我们想要的。

<item name="android:navigationBarColor">@color/colorPrimaryDark</item>
<item name="android:windowLightNavigationBar">true</item>

在我的应用案例colorPrimaryDark中,浅色主题为#FFFFFF,深色主题为dracula,您还可以为此声明一个新变量。结果如下:

浅色主题 enter image description here

深色主题

enter image description here

此处android:navigationBarColor设置导航栏的背景颜色。并且android:windowLightNavigationBar设置深色按钮颜色并表示背景是浅色,正如您从其名称中可以理解的那样。

希望这会有所帮助!

答案 4 :(得分:0)

它适用于 android >= 10 你可以试试默认颜色android

<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowLightNavigationBar">true</item>
<item name="android:windowTranslucentNavigation">true</item>

顺便说一下,你可以试试这个

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