首页 > 解决方案 > 如何有一个透明的状态栏但让导航栏不透明?

问题描述

我想在我的应用程序上有一个透明的状态栏(所以背景在它后面),但我希望底部的导航栏保持黑色。

我可以通过设置使两者都透明getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

我可以通过设置使顶部半透明(部分透明)<item name="android:windowTranslucentStatus">true</item>

但是,如果不使底部也透明,我就不能使顶部完全透明。使用<item name="android:statusBarColor">@android:color/transparent</item>或类似方法不起作用。

有谁知道如何在不影响导航栏的情况下制作一个完全透明的状态栏?

标签: androidstylestransparencystatusbarnavigationbar

解决方案


要独立控制 KitKat 上状态栏和导航栏的半透明性,您可以简单地使用窗口管理器标志FLAG_TRANSLUSCENT_STATUSFLAG_TRANSLUSCENT_NAVIGATION活动onCreate()方法。但是,在 KitKat 上,系统可能会在状态栏上绘制可绘制的半透明渐变稀松布。这似乎是特定于设备的:在我的 KitKat 设备上它是完全透明的,但在 Android Studio 模拟器上它显示了一个稀松布。

在 Lolliop 或更高版本上,您可以使用该Window#setStatusBarColor(int)方法和FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS窗口管理器标志来设置状态栏颜色。请注意,在这种情况下清除FLAG_TRANSLUSCENT_STATUS标志。如果您希望颜色透明,这意味着您的应用程序支持全屏模式并设置系统 UI 可见性,因此由您的应用程序管理状态栏背景颜色。

将它们放在一起看起来像这样:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Window window = getWindow();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(0x00000000);  // transparent
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        int flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
        window.addFlags(flags);
    }
    setContentView(R.layout.main);
    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}

使用的布局示例:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff00ff00"
    android:fitsSystemWindows="false"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Hello World!"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        android:orientation="vertical">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay"/>

    </LinearLayout>

</RelativeLayout>

示例截图。

棒糖:

棒棒糖+

奇巧:

奇巧


推荐阅读