傳統的手機狀態欄是呈現出黑色條狀的,有的和手機主界面有很明顯的區別。這同樣就在必定程度上犧牲了視覺寬度,界面面積變小。沉浸式是APP界面圖片延伸到狀態欄, 應用自己沉浸於狀態欄。android
爲了實現沉浸式狀態欄,有兩種方法。第一種是爲每一個activity設置狀態欄顏色,即變色龍式狀態欄。第二種是將狀態欄透明化,將佈局延伸到狀態欄下,實現真正的沉浸式狀態欄。app
設置狀態欄顏色的接口從安卓5.0(API 21)纔開始提供,所以變色式狀態欄只能用在運行5.0以及5.0以上版本的安卓系統的設備上。佈局
若是app使用了ActionBar的話,系統會自動根據bar的顏色改變狀態欄的顏色。不在話下。
若是沒有使用Actionbar,例如使用了自定義的Toolbar或者沒有使用,則須要將主題設置爲:ui
values/styles.xml:spa
<style name="AppTheme.Base" parent="Theme.Design.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
咱們還須要將狀態欄聲明爲透明,即將android:windowTranslucentStatus
這個屬性設置爲true
,這個API從安卓4.4(API 19)開始被支持。code
values-v19:xml
<style name="AppTheme" parent="AppTheme.Base"> <item name="android:windowTranslucentStatus">true</item> <item name="android:fitsSystemWindows">true</item> </style>
如圖所示:接口
狀態欄的顏色與Toolbar顏色一致,可是被一層半透明的黑色籠罩。圖片
不管是否使用了Actionbar或Toolbar,均可以使用如下方法經過API設置狀態欄顏色:ip
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { activity.getWindow() .addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); activity.getWindow() .clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // colorResId就是你要設置的狀態欄顏色值 activity.getWindow() .setStatusBarColor(activity.getResources().getColor(colorResId)); }
那麼能夠達到以下的效果:
(未完待續)