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

打印 上一主题 下一主题

主题 823|帖子 823|积分 2469

目次
1.关键方法
2.在项目中的应用


1.关键方法

去掉小白条参考:https://juejin.cn/post/7090385839619833893
该方法在小米手机上测试去掉了手势栏与状态栏;
关键方法1:
  1. WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
复制代码
该方法使得布局内容能够扩展到顶部的状态栏以及底部的导航栏
关键方法2:
方法1将内容延展到状态栏与手势导航栏的下面,于是方法2只需要将状态栏以及底部手势导航栏的颜色设置透明即可。
  1. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  2.             // 设置导航栏和状态栏的颜色
  3.             getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
  4.             getWindow().setNavigationBarColor(color);
  5.             getWindow().setStatusBarColor(color);
  6.         }
复制代码
关键方法3:
方法3修改状态栏上体系关照的图标与字体颜色
  1. View decor = activity.getWindow().getDecorView();
  2.         if (dark) {
  3.             // 设置状态栏为亮色模式(深色图标)
  4.             decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
  5.         } else {
  6.             // 设置状态栏为暗色模式(浅色图标)
  7.             decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
  8.         }
复制代码

2.在项目中的应用

此处将上面的三个方法放进项目标基类里面,其他Activity继承该类即可设置所有页面全屏显示
  1. 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();
  2.         if (dark) {
  3.             // 设置状态栏为亮色模式(深色图标)
  4.             decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
  5.         } else {
  6.             // 设置状态栏为暗色模式(浅色图标)
  7.             decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
  8.         }    }    /**     * 设置全屏模式,并根据参数选择是否显示状态栏和导航栏     *     * @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) {
  9.             // 设置导航栏和状态栏的颜色
  10.             getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
  11.             getWindow().setNavigationBarColor(color);
  12.             getWindow().setStatusBarColor(color);
  13.         }    }    /**     * 获取布局文件的资源 ID     *     * @return 布局文件的资源 ID     */    protected abstract int getLayoutId();    /**     * 初始化视图组件     *     * @param savedInstanceState 生存的实例状态     */    protected abstract void initViews(@Nullable Bundle savedInstanceState);    @Override    protected void onDestroy() {        super.onDestroy();    }}
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表