Android 5.0透明狀態欄設置
聲明
這篇文章是針對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)傳入的實參類型如下:
- View.SYSTEM_UI_FLAG_VISIBLE:顯示狀態欄,Activity不全屏顯示(恢復到有狀態的正常情況)。
- View.INVISIBLE:隱藏狀態欄,同時Activity會伸展全屏顯示。
- View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏顯示,且狀態欄被隱藏覆蓋掉。
- 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>
在這里說一下要注意的幾個點:
- 這個 <LinearLayout> ... </LinearLayout> 的作用,我之前沒有用這個 <LinearLayout> 包裹 Toolbar ,結果怎么設置,都不能實現非常完美的透明狀態欄,要么是statusbar顏色問題,要么是statusbar和NavigationView顏色不統一的問題。后來查找了很多資料,在一個小角落里面發現了,需要外層用 <LinearLayout> 包裹一下,這樣的話就可以非常完美的顯示出網易云音樂的效果了。
- NavigationView 里面設置的 android:fitsSystemWindows="true" ,這個也是為了讓側邊欄即抽屜能夠和狀態欄顏色統一。
- <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