1. 程式人生 > >Android沉浸式狀態列

Android沉浸式狀態列

之前一直沒怎麼去研究這方面的,最近有個專案,讓我在沉浸式裡面真的沉浸死了,雖然學習了很多,但是還是個沉浸式菜鳥,這裡也就記錄一些遇到的問題和分享下相關經驗吧

需求:

這裡是一個側滑頁面和主頁面,這個佈局必須是佔滿全屏的

另外一種 需要實現這樣的效果,也就是不會頂上去的

實現:

    <style name="MyFullScreenTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowTranslucentStatus" tools:targetApi="kitkat">true</item>
        <item name="android:statusBarColor" tools:targetApi="lollipop">@android:color/transparent</item>
        <item name="android:windowTranslucentNavigation" tools:targetApi="kitkat">true</item>

    </style>

直接定義一個這樣的主題,activity加入這個主題可以實現第一種需求

至於第二種,當然也可以這樣做,但是必須要加個屬性android:fitsSystemWindows="true"

這個的意思就是佈局在狀態列下面

接下來我用了一個githup上面的

implementation 'com.gyf.barlibrary:barlibrary:2.3.0'//沉浸式狀態列和沉浸式導航欄管理

這個用法也簡單,在baseactivity裡面新增以下

    /**
     * 新增這個則會點選edittext的時候講佈局頂上去
     * 同時如果edittext的焦點不會被遮擋
     * */
    private ImmersionBar mImmersionBar;
    public void setStatusBar() {
        mImmersionBar = ImmersionBar.with(this);
        mImmersionBar.statusBarColor(R.color.white)
                //原理:如果當前裝置支援狀態列字型變色,會設定狀態列字型為黑色,如果當前裝置不支援狀態列字型變色,會使當前狀態列加上透明度,否則不執行透明度
                .statusBarDarkFont(true, 0.2f)
                //使用該屬性必須指定狀態列的顏色,不然狀態列透明,很難看
                .fitsSystemWindows(true)
                //所有子類都將繼承這些相同的屬性
                .init();
    }

這樣的話所有繼承了baseactivity的activity都會實現第二種需求,但是又有其他不一樣的,例如需求一那種,這個時候就在需要實現的位置單獨新增一種狀態

    private ImmersionBar mImmersionBar;
    public void setStatusBar() {
        mImmersionBar = ImmersionBar.with(this);
        mImmersionBar.statusBarColor(R.color.transparent)
                //原理:如果當前裝置支援狀態列字型變色,會設定狀態列字型為黑色,如果當前裝置不支援狀態列字型變色,會使當前狀態列加上透明度,否則不執行透明度
                .statusBarDarkFont(true, 0.2f)
                //使用該屬性必須指定狀態列的顏色,不然狀態列透明,很難看
                .fitsSystemWindows(false)
                //所有子類都將繼承這些相同的屬性
                .init();
    }

這樣就都實現了。如有疑問請留言