android 变沉浸式、全面屏、无状态栏、标题栏、手势导航栏

目录

1.关键方法

2.在项目中的应用


1.关键方法

去掉小白条参考:https://juejin.cn/post/7090385839619833893

该方法在小米手机上测试去掉了手势栏与状态栏;

关键方法1:

WindowCompat.setDecorFitsSystemWindows(getWindow(), false);

该方法使得布局内容能够扩展到顶部的状态栏以及底部的导航栏

关键方法2:

方法1将内容延展到状态栏与手势导航栏的下面,于是方法2只需要将状态栏以及底部手势导航栏的颜色设置透明即可。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            // 设置导航栏和状态栏的颜色
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            getWindow().setNavigationBarColor(color);
            getWindow().setStatusBarColor(color);

        }

关键方法3:

方法3修改状态栏上系统通知的图标与字体颜色

View decor = activity.getWindow().getDecorView();
        if (dark) {
            // 设置状态栏为亮色模式(深色图标)
            decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        } else {
            // 设置状态栏为暗色模式(浅色图标)
            decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        }

2.在项目中的应用

此处将上面的三个方法放进项目的基类里面,其他Activity继承该类即可设置所有页面全屏显示

public abstract class BaseActivity extends AppCompatActivity {
   @Override
   protected void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

       // 设置布局文件
       setContentView(getLayoutId());

       // 初始化视图组件
       initViews(savedInstanceState);

       // 设置全屏模式并隐藏状态栏和导航栏
       setFullscreen(false, false);

       // 设置状态栏的图标和文本为深色(亮色状态栏)
       setAndroidNativeLightStatusBar(this, false);
   }

    /**
     * 设置 Android 状态栏的图标和文本颜色
     *
     * @param activity 当前的 Activity
     * @param dark     是否设置为深色模式
     *                 true: 状态栏图标和文本为深色(背景为浅色)
     *                 false: 状态栏图标和文本为浅色(背景为深色)
     */
    private static void setAndroidNativeLightStatusBar(Activity activity, boolean dark) {
        View decor = activity.getWindow().getDecorView();
        if (dark) {
            // 设置状态栏为亮色模式(深色图标)
            decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        } else {
            // 设置状态栏为暗色模式(浅色图标)
            decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        }
    }

    /**
     * 设置全屏模式,并根据参数选择是否显示状态栏和导航栏
     *
     * @param isShowStatusBar     是否显示状态栏
     *                            true: 显示状态栏
     *                            false: 隐藏状态栏
     * @param isShowNavigationBar 是否显示导航栏
     *                            true: 显示导航栏
     *                            false: 隐藏导航栏
     */
    public void setFullscreen(boolean isShowStatusBar, boolean isShowNavigationBar) {
      /*  int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;*/
/*
        if (!isShowStatusBar) {
            // 如果不显示状态栏,则设置为全屏模式
            uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN;
        } else {
            // 保持状态栏可见但扩展到全屏
            uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
        }

        if (!isShowNavigationBar) {
            // 如果不显示导航栏,则隐藏导航栏
            uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
        } else {
            // 保持导航栏可见但扩展到全屏
            uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
        }*/
        /*int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
        // 设置系统 UI 选项
        getWindow().getDecorView().setSystemUiVisibility(uiOptions);*/
        WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
        // 设置导航栏和状态栏的颜色为透明,并设置为亮色状态栏
        setNavigationStatusColor(Color.TRANSPARENT, true);

    }

    /**
     * 设置导航栏和状态栏的颜色
     *
     * @param color            要设置的颜色
     * @param isLightStatusBar 是否设置状态栏为亮色模式(深色图标)
     *                         true: 状态栏图标和文本为深色(背景为浅色)
     *                         false: 状态栏图标和文本为浅色(背景为深色)
     */
    public void setNavigationStatusColor(int color, boolean isLightStatusBar) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            // 设置导航栏和状态栏的颜色
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            getWindow().setNavigationBarColor(color);
            getWindow().setStatusBarColor(color);

        }
    }

    /**
     * 获取布局文件的资源 ID
     *
     * @return 布局文件的资源 ID
     */
    protected abstract int getLayoutId();

    /**
     * 初始化视图组件
     *
     * @param savedInstanceState 保存的实例状态
     */
    protected abstract void initViews(@Nullable Bundle savedInstanceState);

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45372239/article/details/141433718