网上抄的别人的代码,原文找不到了,所以只能标记为原创,原作者看到的话,请联系我,我贴上原文链接

粘贴在这里的原因是担心以后找不到这么优秀的方案了

下面是完整代码:

package com.yangcong345.support.base.utils;import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;
import android.view.View;
import android.view.Window;/*** 时间:2022/6/21 14:53* 作者:菜籽* 备注:用来获取虚拟导航栏的相关方法*/public class NavigationBarUtil {/*** 获取虚拟按键的高度* 如果开启全面屏,则返回0* 如果隐藏了导航栏,则返回0* 返回系统值*/public static int getNavigationBarHeight(Context context) {if (isFullScreenEnable(context)) {return 0;}if (isNavigationBarHide(context)) {return 0;}return getNavigationBarHeightInner(context);}/*** 是否启用了全面屏手势*/public static boolean isFullScreenEnable(Context context) {if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {return Settings.Global.getInt(context.getContentResolver(), getDeviceInfo(), 0) != 0;}return false;}/*** 获取设备信息(目前支持几大主流的全面屏手机,亲测华为、小米、oppo、魅族、vivo都可以)*/private static String getDeviceInfo() {String brand = Build.BRAND;if (TextUtils.isEmpty(brand)) return "navigationbar_is_min";if (brand.equalsIgnoreCase("HUAWEI")) {return "navigationbar_is_min";} else if (brand.equalsIgnoreCase("XIAOMI")) {return "force_fsg_nav_bar";} else if (brand.equalsIgnoreCase("VIVO")) {return "navigation_gesture_on";} else if (brand.equalsIgnoreCase("OPPO")) {return "navigation_gesture_on";} else {return "navigationbar_is_min";}}/*** 虚拟导航栏是否隐藏,这个方法需要延迟后才能获取到*/private static boolean isNavigationBarHide(Context context) {if (!(context instanceof Activity)) return false;Activity activity = (Activity) context;View view = activity.findViewById(android.R.id.navigationBarBackground);if (view == null) return true;return view.getVisibility() != View.VISIBLE;}/*** 虚拟键高度(无论是否隐藏)*/private static int getNavigationBarHeightInner(Context context) {int result = 0;int resourceId = context.getResources().getIdentifier("navigation_bar_height", "dimen", "android");if (resourceId > 0) {result = context.getResources().getDimensionPixelSize(resourceId);}return result;}public static void hideNavigationBar(Window window) {if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {int option = View.SYSTEM_UI_FLAG_LAYOUT_STABLE| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;window.getDecorView().setSystemUiVisibility(option);}}/*** 适配导航栏的高度* <p>* 注意:这个地方不能取原来的paddingBottom再加上导航栏的高度* 原因:用户可以在系统设置里面修改为侧滑或者三大金刚的形式* 所以我们需要在activity的resume里面来实现适配,* 如果采用 paddingBottom + NavigationBarHeight的形式* 会导致底部的间距越来越大** @param rootView:页面跟布局,传入页面跟布局后,会默认加一个导航栏的padding*/public static void adapterNavigationBar(final View rootView) {rootView.post(() -> {int height = getNavigationBarHeight(rootView.getContext());rootView.setPadding(0, 0, 0, height);});}}

一种全面屏手势适配方案相关推荐

  1. Android 小米全面屏手势底部虚拟按键的适配

    在项目的开发过程中,发现小米部分手机有一个全面屏手势功能,该功能可隐藏底部虚拟按键,通过手势的方式来实现返回和Home功能. 效果如下所示: 当开启全面屏手势的时候,就会存在一个问题,我们通过以下代码 ...

  2. Android 全面屏适配及判断是否为全面屏,全面屏手势和虚拟导航栏的判断

    一,全面屏的适配 全面屏出现后,如果不做适配,屏幕上会出现上下黑边,影响视觉效果. 针对此问题,Android官方提供了适配方案,即提高App所支持的最大屏幕纵横比,实现起来也比较简单,在Androi ...

  3. 三星android10手势,三星全面屏手势终于来了!看着有点熟悉

    智能手机进入全面屏时代之后,虽然手机尺寸变化不大,但是由于屏占比的提高,手机正面可触控的区域越来越大.安卓传统的三大金刚键在国内已经很少见了,Android 9.0也支持原生手势操作代替三大金刚键,现 ...

  4. ios pan手势滑动消失动画_解析Color OS全面屏手势,操作丝滑,操作逻辑帮了大忙...

    安卓手机真的越来越流畅了!这是我在重度使用OPPO Reno4一段时间后得到的结论. 在使用手机时,我们对手机体验的感知首先就来自于系统.而其中,手机使用是否顺手,反应是否快的第一表现,就是手机操作上 ...

  5. android10全面屏手势 操作图,全面屏手势浪潮来临?安卓Q测试版新发现,手势操作十分便捷...

    近两年来手机最大的变化是什么?除了越来越多的摄像头数量,就是屏幕进一步变大,试图占据手机的整个正面. 虽说能够显示的内容更多了,但是传统的点按操作并不顺畅,于是一些厂商带来了全面屏手势解决了这个问题. ...

  6. Android 9 谷歌全面屏,跟虚拟导航栏说再见,安卓9.0将使用全面屏手势

    原标题:跟虚拟导航栏说再见,安卓9.0将使用全面屏手势 [PConline 资讯]昨日,谷歌正式推送了安卓操作系统9.0的大版本更新,别的新功能先不说,有个亮眼的地方就是加入了全面屏手势操作,根据外媒 ...

  7. android q状态栏,用腻了导航栏?在一加Android Q beta中强行开启全面屏手势

    本帖最后由 湛蓝回忆 于 2019-6-29 09:31 编辑 本教程仅适用于可以参与尝鲜的oneplus6.6t.7.7pro 照做前请先确认自己手机的系统版本为Android 10 照做前请先确认 ...

  8. android10全面屏手势 操作图,丨系统设计丨ZUI 10加入更多全面屏手势

    丨系统设计丨ZUI 10加入更多全面屏手势 系统方面,联想Z5 Pro GT搭载了ZUI 10系统.总的来说这代系统主要是的改观是:以"全面屏"为核心体验加入属于ZUI特有的&qu ...

  9. 小米8 android9手势,数码教程资讯:小米9怎么开启全面屏手势

    现在各种各样的数码设备在我们的生活当中几乎可以说是无处不在,平时我们使用的手机,IP,电脑等等这些都属于数码设备,那么这些数码设备当中会存在着很多的功能,当然在我们使用的过程当中自然也会出现说各种的问 ...

最新文章

  1. cinder存储服务
  2. C#资源释放及Dispose、Close和析构方法
  3. 线性表算法题库_数据结构与算法(线性表)练习题
  4. 统计学基础一:基础概念
  5. vuex 在非组件中调用 mutations 方法
  6. 爬虫练习:爬豆瓣读书的短评
  7. c python boost.python_如何利用Boost.Python实现Python C/C++混合编程详解
  8. python commands执行不连续_[Python] 利用commands模块执行Linux shell命令
  9. php删除下拉框记录,删除一条数据_php删除一条记录(删除确认提示)
  10. atitit.新增编辑功能 跟orm的实现 attilax p31
  11. womic网络错误_WO Mic驱动程序下载
  12. 【SDCC 2016】未来应用,IBOS、爱范儿、滴滴出行、腾讯云的微信开发之路
  13. win7开机后桌面变成黑色,此window副本不是正版
  14. 变编程用户输入月份,判断这个月份是属于哪个季节?
  15. 一款基于tampermonkey的浏览器插件:聚合搜索
  16. 微信小程序如何解析标签?
  17. 逻辑回归与softmax回归
  18. mac怎么强制退出程序,强制退出Mac程序,mac 强制退出程序
  19. 社区医院信息系统的设计与实现
  20. DOTA2是暴雪的吗

热门文章

  1. 小黑盒服务器不稳定,小黑盒什么时候更新 | 手游网游页游攻略大全
  2. 舆情监控数据采集 Scrapy 标准化爬虫数据采集模板
  3. web设计网页规划与设计:企业电子网站设计——简单的电子产品公司官网模板(5页)HTML+CSS+JavaScript
  4. cyq.data 连接mysql_CYQ.Data 轻量数据层之路 优雅V1.4 辅助工具发布
  5. win7网络无法连接其他计算机,win7电脑无法连接网络怎么办_win7电脑无法连接到网络怎么解决-win7之家...
  6. 使用阈值图修改角色脸部阴影
  7. (个人)自媒体快传号注册入驻流程
  8. Android 性能优化系列之 —— 存储优化(3)
  9. 早安朋友圈文案简短正能量
  10. GOPROXY代理地址