安卓如何设置沉浸式状态栏,注意处理华为等有虚拟按键的问题
来源:互联网 发布:广州数控车床编程图纸 编辑:程序博客网 时间:2024/06/06 13:50
当前安卓开发中,基本都使用了沉浸时候状态栏,拉伸视觉体验,增大了屏幕空间,但是如何设置沉浸式状态栏呢,这里简单进行介绍:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);}使用上面几行代码就可以实现沉浸式效果,但是在适配小米和魅族等有虚拟按键和自己风格的手机时,会出现沉浸式没有效果,或者手机原有的虚拟按钮把底部的导航栏这改的额问题,为了处理这个问题,我们需要先单独给他们进行处理:
public static boolean setMiuiStatusBarDarkMode(Activity activity, boolean darkmode) { Class<? extends Window> clazz = activity.getWindow().getClass(); try { int darkModeFlag = 0; Class<?> layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams"); Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); darkModeFlag = field.getInt(layoutParams); Method extraFlags = clazz.getMethod("setExtraFlags", int.class, int.class); extraFlags.invoke(activity.getWindow(), darkmode ? darkModeFlag : 0, darkModeFlag); return true; } catch (Exception e) { e.printStackTrace(); } return false;}public static boolean setMeizuStatusDarkIcon(Activity activity, boolean b) { boolean result = false; if (activity != null) { try { WindowManager.LayoutParams lp = activity.getWindow().getAttributes(); Field darkFlag = WindowManager.LayoutParams.class .getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON"); Field meizuFlags = WindowManager.LayoutParams.class .getDeclaredField("meizuFlags"); darkFlag.setAccessible(true); meizuFlags.setAccessible(true); int bit = darkFlag.getInt(null); int value = meizuFlags.getInt(lp); if (b) { value |= bit; } else { value &= ~bit; } meizuFlags.setInt(lp, value); activity.getWindow().setAttributes(lp); result = true; } catch (Exception e) { e.printStackTrace(); } } return result;}上面是处理魅族和小米系统的方法,但是还不能处理有虚拟键盘的情况,下面就来说一下如何处理:
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)public static boolean hasSoftKeys(WindowManager windowManager) { Display display = windowManager.getDefaultDisplay(); DisplayMetrics realDisplayMetrics = new DisplayMetrics(); display.getRealMetrics(realDisplayMetrics); int realHeight = realDisplayMetrics.heightPixels; int realWidth = realDisplayMetrics.widthPixels; DisplayMetrics displayMetrics = new DisplayMetrics(); display.getMetrics(displayMetrics); int disHeight = displayMetrics.heightPixels; int disWidth = displayMetrics.widthPixels; return (realWidth - disWidth) > 0 || (realHeight - disHeight) > 0;}这样一来,基本就够用了,下面说一下,如何使用
public static void setStatus(Activity activity) { setMeizuStatusDarkIcon(activity, true); setMiuiStatusBarDarkMode(activity, true); if (hasSoftKeys(activity.getWindowManager())) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 透明状态栏 activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } } else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } }}我是把这些方法封装在一个方法中,使用的时候直接调用就可以了。现在你也可以试试,去做一个沉浸式了
阅读全文
0 0
- 安卓如何设置沉浸式状态栏,注意处理华为等有虚拟按键的问题
- android虚拟按键和状态栏的问题 沉浸式状态栏
- android虚拟按键和沉浸式状态栏冲突等代码解决方案(eg:死坑华为)
- Android 解决沉浸式状态栏和华为虚拟按键冲突
- android沉浸式状态栏和虚拟按键
- 安卓状态栏问题详解大全(沉浸式状态栏)
- 隐藏与显示华为等有虚拟按键手机的虚拟按键
- 解决华为手机沉浸式状态栏的问题
- 安卓沉浸式状态栏
- 安卓沉浸式状态栏
- 安卓沉浸式状态栏
- 安卓沉浸式状态栏
- 安卓沉浸式状态栏
- 安卓沉浸式状态栏
- 安卓沉浸式状态栏
- 安卓沉浸式状态栏
- 安卓沉浸式状态栏延生与透明设置
- 华为手机的虚拟按钮 包括沉浸式的问题
- Delphi写的备份数据库程序备份时出现“超时已过期”解决办法
- java:数组转list、list转数组
- js浮点数加减乘除
- 继承与派生
- 如何转载博客
- 安卓如何设置沉浸式状态栏,注意处理华为等有虚拟按键的问题
- butterknife 使用(笔记)
- 士兵杀敌(三)
- 后台常用图标,代码大全
- C++里的find()函数
- Django学习日记 第二天 mysql配置 和 模板的使用
- 前端常用语句汇总
- apk反编译常见工具
- mysql 根据字段聚类并选出每组前N条