Fragment和Activity兩種沉浸式狀態欄的實現

我們普通的Activity所有的標題欄顏色風格基本是一致的,所以我們可以將這種單獨的Activity的沉浸式狀態欄放在BaseActivity中實現。但是如果遇到一級欄目的fragment中,且有些fragment中有圖片我們該如何處理呢?先看圖

這裏寫圖片描述

這裏寫圖片描述

解決方法:
1.普通的Activity我們採用github上的庫放在BaseActivity來實現.
2.Activity的fragment我們對其每個fragment進行處理:
- Activity全屏顯示
- 設置Activity的主題爲:Theme.AppCompat.Light(如果沒設置爲light設置透明狀態欄時會顯示黑色)
- 設置狀態欄透明
3.這時會出現兩種情況,一種是頂部爲圖片(或佈局背景爲圖片)的fragment實現了圖二的效果,達到了我們的要求,另一種是標題欄和狀態欄混合在一起,文字混亂,我們開始處理這種情況:
- 在當前的fragment中的標題欄上部添加一塊view,使之和狀態欄的高度一致便解決了混合在一起顯示的亂像.

第二步的代碼處理:

//得到當前界面的裝飾視圖
            if(Build.VERSION.SDK_INT >= 21) {
                View decorView = getWindow().getDecorView();
                //讓應用主題內容佔用系統狀態欄的空間,注意:下面兩個參數必須一起使用 stable 牢固的
                int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
                decorView.setSystemUiVisibility(option);
                //設置狀態欄顏色爲透明
                getWindow().setStatusBarColor(Color.TRANSPARENT);
            }

第三步的代碼處理:
XML文件:

。。。
    <View
        android:id="@+id/fillStatusBarView"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:background="@color/c2A81EA" />
。。。

高度設置:

        /**
         * 設置view高度爲statusbar的高度,並填充statusbar
         */
        View mStatusBar = view.findViewById(R.id.fillStatusBarView);
        LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mStatusBar.getLayoutParams();
        lp.width = LinearLayout.LayoutParams.MATCH_PARENT;
        lp.height = CommonUtils.getStatusBar();
        mStatusBar.setLayoutParams(lp);
    /**
     * 獲取狀態欄高度
     * @return
     */
    public static int getStatusBar(){
        /**
         * 獲取狀態欄高度
         * */
        int statusBarHeight1 = -1;
        //獲取status_bar_height資源的ID
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            //根據資源ID獲取響應的尺寸值
            statusBarHeight1 = getResources().getDimensionPixelSize(resourceId);
        }
        return statusBarHeight1;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章