Android沉浸式狀態欄下,如何代碼實現android:fitsSystemWindows="true"的效果

  • 沉浸式狀態欄相信大家都不陌生了,相關的文章到處都是,介紹一下一個我覺的比較好的文章,Android 沉浸式狀態欄完美解決方案
    Android關於沉浸式狀態欄總結
  • 如果有的頁面想要只改變狀態欄的顏色,並不侵入到狀態欄上,相信大部分同學使用android:fitsSystemWindows="true"效果。這個與侵入式的相互矛盾,無法實現侵入到狀態欄,最後在沉浸式的狀態下,添加了一個和狀態欄一樣高的view,完美的解決問題。
/**
     * 添加View到狀態欄,在沉浸式狀態下不侵入狀態欄
     */
    public static void setStatusBarView(Activity activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            // 生成一個狀態欄大小的矩形
            View StatusView = createStatusView(activity);
            // 添加statusView到佈局中
            ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
            decorView.addView(StatusView);
            // 設置根佈局的參數
            ViewGroup rootView = (ViewGroup) (((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0));
            rootView.setFitsSystemWindows(true);
        }
    }

    private static View createStatusView(Activity activity) {
        int statusBarHeight = getStatusBarHeight(activity);
        View view = new View(activity);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight);
        view.setLayoutParams(params);
        view.setBackgroundColor(Color.TRANSPARENT);
        return view;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章