Android 5.0透明狀態欄設置

聲明

這篇文章是針對Android 5.0及以上版本的系統進行透明的狀態欄設置,Android 5.0以下的系統暫不在本篇文章的討論范圍之內。

Android 5.0透明狀態欄——普通界面

先貼出MainActivity布局代碼:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    android:fitsSystemWindows="true"
    tools:context="stephen.com.material_design.NoteActivity">
        
    <include
        layout="@layout/app_bar_note"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>

上面的代碼中,最主要的兩行分別是:

  • 設置最外層布局背景色為Toolbar的顏色:android:background="@color/colorPrimary"
  • 設置Toolbar不擴展到狀態欄:android:fitsSystemWindows="true"
    在布局文件中設置完畢后,還需要在onCreate()里面加上如下的代碼:
  • 設置狀態欄顏色為透明:getWindow().setStatusBarColor(Color.TRANSPARENT);
  • 設置狀態欄和APP的位置關系:getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

setSystemUiVisibility(int visibility)傳入的實參類型如下:

  1. View.SYSTEM_UI_FLAG_VISIBLE:顯示狀態欄,Activity不全屏顯示(恢復到有狀態的正常情況)。
  2. View.INVISIBLE:隱藏狀態欄,同時Activity會伸展全屏顯示。
  3. View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏顯示,且狀態欄被隱藏覆蓋掉。
  4. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏顯示,但狀態欄不會被隱藏覆蓋,狀態欄依然可見,Activity頂端布局部分會被狀態遮住。

主要需要用到的參數就是以上的幾個,其他的參數在實際的開發中用的相對較少,這里也就不列舉出來了。
通過上面的兩個地方的代碼設置之后,我們的APP就可以實現透明狀態欄的效果了。

普通界面的透明狀態欄.png

以上就是普通的界面設置透明狀態欄的方法。

Android 5.0透明狀態欄——帶DrawerLayout界面

帶有DrawerLayout的界面設置透明狀態欄,最終效果是和網易云音樂一樣的,方法其實和上面的差不多,但是有個小的地方需要注意,在這里我還是把代碼和方法都完整的講一遍。
帶有DrawerLayout的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    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:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    tools:openDrawer="start">

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

        <include
            layout="@layout/app_bar_main"/>
    </LinearLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer"/>

</android.support.v4.widget.DrawerLayout>

在這里說一下要注意的幾個點:

  1. 這個<LinearLayout> ... </LinearLayout>的作用,我之前沒有用這個<LinearLayout>包裹Toolbar,結果怎么設置,都不能實現非常完美的透明狀態欄,要么是statusbar顏色問題,要么是statusbar和NavigationView顏色不統一的問題。后來查找了很多資料,在一個小角落里面發現了,需要外層用<LinearLayout>包裹一下,這樣的話就可以非常完美的顯示出網易云音樂的效果了。
  2. NavigationView里面設置的android:fitsSystemWindows="true",這個也是為了讓側邊欄即抽屜能夠和狀態欄顏色統一。
  3. <include ... />里面就是正常的設置Toolbar什么的了,但是要注意在Toolbar布局的最外層中也記得要添加android:fitsSystemWindows="true"

在布局文件中設置完畢之后,接著就是在代碼中設置了,在onCreate()里面加上如下的代碼:

  • 設置狀態欄顏色為透明:getWindow().setStatusBarColor(Color.TRANSPARENT);
  • 設置狀態欄和APP的位置關系:getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

將以上的所有代碼都設置完畢之后,最終呈現的效果如下:

沒有打開抽屜.png
打開抽屜

至此,我們已經在Android 5.0上實現透明狀態欄。但是對于這樣的透明狀態欄,我個人是不推薦的。因為我們進行的Android開發,而這個透明狀態欄卻給人一種IOS的風格,Android開發就應該從方方面面都能夠體現出Android的特性。雖然在Android 5.0之前,Android的UI風格一直都慘不忍睹,但是我們一路都堅持下來了,而在Android 5.0之后,因為Material Design的推出,Android的顏值可以說是提升了非常多。所以我們開發人員更應該開發Pure Android的程序,而不是模仿和抄襲IOS的各種風格。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,138評論 25 708
  • 前言 原文:http://blog.csdn.net/mybeta/article/details/5076032...
    naturs閱讀 23,159評論 8 70
  • 實現輔助(外掛)參考地址:http://developer.android.com/training/access...
    AFinalStone閱讀 1,450評論 0 0
  • 問題描述 跟豆青一起寫企業用戶列表時table樣式有很多問題,沒有辦法給一行加邊框我們最后使用了border-co...
    ittianbao閱讀 242評論 0 0
  • 新鄉,這個中原小城市不夠繁華,不夠聞名,但生活在這里的人卻在詩意的棲居。我們過著平凡的小日子,柴米油鹽作陪...
    聊欲投吾簪閱讀 199評論 0 1