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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章