Android 5.0透明狀態欄設置

wandaxian 8年前發布 | 23K 次閱讀 安卓開發 Android開發 移動開發

聲明

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

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

先貼出MainActivity布局代碼:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="

<include
    layout="@layout/app_bar_note"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</RelativeLayout></code></pre>

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

  • 設置最外層布局背景色為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="

<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></code></pre>

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

  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的各種風格。

 

來自:http://www.jianshu.com/p/515c88ef6f9e

 

 本文由用戶 wandaxian 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!