安卓沉(bian)浸(se)式狀態欄實踐

沉浸式狀態欄

傳統的手機狀態欄是呈現出黑色條狀的,有的和手機主界面有很明顯的區別。這同樣就在必定程度上犧牲了視覺寬度,界面面積變小。沉浸式是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>

如圖所示:
clipboard.png接口

狀態欄的顏色與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));
}

那麼能夠達到以下的效果:

clipboard.png

(未完待續)

相關文章
相關標籤/搜索