首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

手势导航: ViewCompat类中缺少setSystemGestureExclusionRects()方法

手势导航是一种通过手势操作来控制应用程序导航和交互的方式。在Android开发中,可以使用ViewCompat类来处理手势导航相关的操作。

然而,ViewCompat类中确实没有名为setSystemGestureExclusionRects()的方法。这个方法通常用于定义应用程序界面中不受手势导航影响的区域,以确保手势导航不会与应用程序的交互产生冲突。

尽管ViewCompat类中没有提供这个方法,但可以通过其他方式来实现手势导航的功能。一种常见的做法是使用系统提供的全屏手势导航功能,例如Android 10及以上版本中的系统手势导航。

在应用程序中,可以通过以下步骤来启用系统手势导航:

  1. 在AndroidManifest.xml文件中,将应用程序的主题设置为支持全屏手势导航的主题。例如:
代码语言:txt
复制
<application
    ...
    android:theme="@style/AppTheme">
    ...
</application>
  1. 在styles.xml文件中,定义一个支持全屏手势导航的主题。例如:
代码语言:txt
复制
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:navigationBarGestureMode">handle</item>
</style>
  1. 在应用程序的主Activity中,禁用默认的导航栏。例如,在onCreate()方法中添加以下代码:
代码语言:txt
复制
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    getWindow().setDecorFitsSystemWindows(false);
}

通过以上步骤,应用程序将启用系统提供的全屏手势导航功能,而无需使用ViewCompat类中的setSystemGestureExclusionRects()方法。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何处理手势冲突 | 手势导航连载 (三)

: 开启全面屏体验|手势导航 (一) 处理视觉冲突|手势导航 (二) 在上一篇文章,我们讨论完了从边到边绘制应用内容。...某些游戏需要在屏幕上滑动操作一个元素,而这个元素可能出现在屏幕的任何位置,例如平台动作的游戏。...解决方案 1: 无需处理手势冲突 最简单的 "解决方案" ,只需要……什么都不做! 当然,也许您还可以 (参考接下来的几种解决方案) 做点优化,但在启用了手势导航的应用,您应该不会遇到大问题。...我们可以用来解决手势冲突的一种方法是,将出现冲突的视图移出手势导航交互区域。这对于屏幕底部附近的视图尤其重要,因为该区域是系统强制手势交互区域,并且应用无法在该区域使用热区切出 API。...这是因为右半部分适用于那些需要全屏绘制内容的应用,我们将在下一篇手势导航连载为您继续讲解,敬请保持关注。

4.9K30

处理视觉冲突 | 手势导航 (二)

在 Android 上,Insets 区域由 WindowInsets 表示,在 AndroidX 则使用 WindowInsetsCompat。...在 Android 10 系统处理应用布局时,开发者需要知晓 5 个获取 insets 区域的方法。需要使用哪种方法取决于具体情况,接下来就让我们逐一说明。...严格来说,这个方法手势导航关系不大,但是为了知识的完整性,我们这里快速介绍一下这个方法。 和系统窗口边衬区类似,稳定显示区域是系统 UI 可能在您的应用上显示的位置。...我们来看一下例子,我们想给某个控件增加一些边距,让它不被导航栏遮挡: ViewCompat.setOnApplyWindowInsetsListener(view) { v, insets ->...使用 Jetpack 使用 insets 时,我建议始终用 Jetpack 的 WindowInsetsCompat ,无论您需要的最低 SDK 版本是什么。

2.8K30
  • 实现边到边的体验 | 让您的软键盘动起来 (一)

    实现边到边 (edge-to-edge) 去年我们介绍了一个关于实现 "边到边" 的概念,这个方法可以让应用深度利用 Android 10 的手势导航: 开启全面屏体验 | 手势导航 (一)。 ?...其实,实现边到边不单单只是在状态栏和导航栏之后渲染。应用本身需要开始负责处理那些跟应用重叠的系统 UI 的部分。 正如我们前面提到的,两个最直观的例子是状态栏和导航栏。...在 Android 系统,边衬区可以通过 WindowInsets 和 AndroidX 的 WindowInsetsCompat 来访问。...为了使用 WindowInsets,您通常需要在一个视图上添加 OnApplyWindowInsetsListener,并且在这个函数处理传进来的边衬区: ViewCompat.setOnApplyWindowInsetsListener...还有一些其他类型的边衬区,比如 Android 10 最近新增的手势边衬区: ViewCompat.setOnApplyWindowInsetsListener(v) { view, windowInsets

    1.4K20

    实现边到边的体验 | 让您的软键盘动起来 (一)

    实现边到边 (edge-to-edge) 去年我们介绍了一个关于实现 "边到边" 的概念,这个方法可以让应用深度利用 Android 10 的手势导航: 开启全面屏体验 | 手势导航 (一)。...在 Android 系统,边衬区可以通过 WindowInsets 和 AndroidX 的 WindowInsetsCompat 来访问。...还有一些其他类型的边衬区,比如 Android 10 最近新增的手势边衬区: ViewCompat.setOnApplyWindowInsetsListener(v) { view, windowInsets...同样地,如果我们想查出高度,我们也可以通过相同的方法实现: val insets = ViewCompat.getRootWindowInsets(view) val imeVisible = insets.isVisible...APPEARANCE_LIGHT_NAVIGATION_BARS 标志可以给导航栏提供类似的功能。 AndroidX 的 WindowInsetsController?

    32520

    iOS手势的应用1. 四事件的主要方法2. 响应者链3. 手势识别功能(Gesture Recognizer)4. 手势的使用

    例如用户对屏幕进行了侧滑,APP就需要对这个手势进行相应的处理,给用户一个反馈。这些相应的事件就都是在UIResponder定义的。...UIResponder大体有四事件:触摸、加速计、远程控制、按压(iOS9.0以后出来的,3DTouch)。 ?...四事件的主要方法 有的童鞋可能分不清楚手势当中结束和取消的区别。举个栗子,当正在抚摸自己的爱机屏幕的时候,突然来了一个电话,这个“爱抚”的动作就被临时中断了,这个时候就叫做“取消”,而不是结束。...方法监听view触摸事件,有很明显的几个缺点 必须得自定义view 由于是在view内部的touches方法监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件 不容易区分用户的具体手势行为...,必须借助于手势识别器——UIGestureRecognizer 利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势 UIGestureRecognizer是一个抽象

    2.2K40

    回顾 | Jetpack WindowManager 更新

    R8 规则 我们在库添加了 R8 的 "keep" 规则,以保留那些因为内部模块的组织架构而可能被删除的方法。...在默认的状态,'getMaximumWindowMetrics' 方法返回应用当前所在屏幕的边界信息。...API 返回的结果不包括系统 inset 信息,比如状态栏或导航栏,这是由于目前支持的所有 Android 版本,在第一次布局完成之前,这些值对应的区域都不可用。...关于使用 ViewCompat 去获取系统可用 inset 信息,Chris Banes 的文章 - 处理视觉冲突|手势导航 (二) 是非常好的资源。...联系我们 我们非常希望得到您对这些 API 的反馈,尤其是您认为缺少的那些,或者可让您开发变得更轻松的那些反馈。

    52820

    Android 15新特性,强制edge-to-edge全面屏体验

    发现了这个现象之后,可能细心的朋友立马就察觉到了,那如果我手机底部的导航栏模式不是这种手势导航栏,而是传统的Back、Home、Task 3按键导航栏,edge-to-edge全面屏体验会变成什么样呢?...适配的代码其实还是比较简单的,主要就是借助ViewCompat.setOnApplyWindowInsetsListener()这个函数,来对某些指定的View进行偏移,保证其不会被系统的状态栏或导航栏遮挡住就可以了...类似地,我们不希望输入框和发送按钮进入导航栏区域,那么就调用WindowInsetsCompat.Type.navigationBars()来获取导航栏的Insets,之后再用同样的方法来设置padding...另外从Android 10开始,Google引入了手势导航,这使得手机屏幕的左右两侧可以用于触发Back键操作,手机屏幕的底部可以用于触发Home键操作,触发区域如下图中的黄色部分所示。...也就是说,如果我们设计的界面在这个区域有正好类似的手势操作,那么就会出现手势冲突的情况,导致用户的操作无法正常进行。

    8810

    Android ViewDragHelper使用方法详解

    帮我们实现各种类型的复杂手势操作。其实例通过静态工厂创建ViewDragHelper一般用在一个自定义ViewGroup的内部。..., 第三个参数为我们手势处理的毁掉接口 我们需要先在view事件分发时把手势操作交给ViewFragHelper @Override public boolean onInterceptTouchEvent...mDrragHelper.shouldInterceptTouchEvent(event); mDrragHelper.processTouchEvent(event); 我们可以在onInterceptTouchEvent决定什么时候把事件交给我们的手势操作...()方法就是当我们移动时就会回调这个方法,此处的left参数就是水平移动返回的left,dx就是水平距离相对变化 onViewRelased()方法就是手指抬起时(释放)时回调的方法,xvel每秒钟水平速度速度慢时为...,并在onEdgeDragStarted方法手动指定要移动的子View @Override public void onEdgeDragStarted(int edgeFlags, int pointerId

    92530

    Android经典实战之使用ViewCompat来处理View兼容性问题

    ViewCompat 是 Android 中一个非常重要的兼容性工具,它属于 AndroidX 库的 core 部分,旨在提供兼容性支持,使得在不同的 Android 版本处理 View 更加便捷和一致...通过 ViewCompat,开发者能够使用一些在新版本引入的方法,而不必担心应用在旧版本的兼容性问题。...boolean isAttached = ViewCompat.isAttachedToWindow(myView); 总结 ViewCompat 提供了一组方法,这些方法封装了不同版本 Android...API 的视图操作,使得在早期版本也能使用新版本的功能。...开发者通过 ViewCompat ,能更容易地实现跨版本的视图处理,提升应用在不同 Android 版本上的兼容性与一致性。 END 点赞转发,让精彩不停歇!

    12710

    利用Android嵌套滑动机制轻松实现顶部布局置顶

    要求头布局和导航布局在内容布局滑动了一定距离(一般是头布局的高度加上导航控件的高度)后,导航控件置顶,然后内容列表继续滑动。...3、Android嵌套滑动机制基础概念 嵌套滚动的两个接口,在上文中已经提到。.... onNestedPreFling和onNestedFling : 同上略 4、嵌套滑动关键源码分析 子view接受到滚动事件后发起嵌套滚动,询问父View是否要先滚动,父View处理了自己的滚动需求后...ViewCompat.canScrollVertically(target, -1); if (hiddenTop || showTop) { scrollBy(...0, dy); consumed[1] = dy; } } 然后重写这个方法就可以实现对应的滑动嵌套,也就是导航栏控件置顶,其实也就是预先知道了导航栏的高度

    1.5K30

    教你五分钟实现Android超漂亮的刻度轮播控件实例教程

    截屏 一、自定义View的常用方法 相信每个Android程序员都知道,我们每天的开发工作当中都在不停地跟View打交道,Android的任何一个布局、任何一个控件其实都是直接或间接继承自View...在这里可以处理一些手势操作。 二、自定义一个刻度控件RulerView   由于代码比较多,而且源码里面的注释也比较详细,所以这里只挑重点的几个方法讲解一下。...游标刻度,宽度在三刻度里面是最长的,颜色高亮,并且也带有文字。 标签文字,用于描述该刻度的用途。   ...此时在View的构造方法可以直接获取这些属性值,代码如下。...要实现持续的惯性滚动,就得依赖于override fun computeScroll(),该方法由draw过程调用,我们可以通过invalidate- onDraw- computeScroll- invalidate

    71731

    Android ViewDragHelper及移动处理总结

    我们知道在我们实际的开发往往会涉及到很多的拖动效果,而ViewDragHelper解决了android手势处理过于复杂的问题。...其实ViewDragHelper并不是第一个用于分析手势处理的,gesturedetector也是,但是在和拖动相关的手势分析方面gesturedetector只能说是勉为其难,其拓展性并不好。...View移动方法总结 layout 在自定义控件,View绘制的一个重写方法layout(),用来设置显示的位置。...在DragHelperCallback实现clampViewPositionHorizontal方法, 并且返回一个适当的数值就能实现横向拖动效果。...,并在onEdgeDragStarted方法手动指定要移动的子View,如之前仿音悦台的页面交互就用到了子View的检测。

    1.5K80

    android 有阻尼下拉刷新列表的实现方法

    根据上述方法,我们可以猜测,在onLoad方法执行的应该是一个线程或者AsyncTask,而在cancelLoad方法要做的就是将这个线程或者AsyncTask取消掉。...因此,我们的PullToRefreshListView继承自ListView,重载其dispatchDraw方法。...监控手势判断ListView是否进入下拉状态并更新distanceY 更进一步,我们要实现的就是对手势的监控,在PullToRefreshListView,我们在onTouchEvent方法中进行处理...在onTouchEvent方法的重载实现,一开始PullToRefreshListView没有接受任何手势,然后当用户按下手指出发ACTION_DOWN事件时,我记录下这个动作,然后当用户进行滑动时,...我们可以看到,onLoad方法是在UI线程执行的,因此如果在onLoad方法执行耗时操作的话,需要在后台线程操作,这与我们前面的解析是对应的。 7.

    3.5K10

    iOS小技能:右滑返回

    基于全局的UINavigationController基实现 若项目有全局的UINavigationController基,给页面添加右滑返回手势 @implementation NavigationController...所以当你自定义导航栏(自定义了leftBarButtonItem按钮)没采用系统的默认的实现,发生当前不可以手势返回,可先检查为什么当前状态,系统不允许你的手势返回,例如是否隐藏了 navigationBar...2.3 动态添加方法 使用场景: 在消息发送和消息转发时会用到动态添加方法 全局控制返回手势 下面的+addMethod方法有三个参数,第一个参数是要添加方法,第二个参数是方法的SEL,第三个参数则是提供方法实现的.../** 往上添加新的方法与其实现 @param class 相应的 @param methodSel 添加的方法 @param methodSelImpl 包含方法实现的SEL */...= self; // 是否允许手势左滑返回上一级, 类似导航控制的左滑返回 _webView.allowsBackForwardNavigationGestures =

    2.2K30

    Android-教你写小米系统应用--我的小米

    构思 前面的文章,我们已经了解了如何去自定义一个ViewGroup,可以在onLayout自由的对子View进行位置设定,我们今天这里刚好需要对上面需求提到的三部分子View(头像ImageView...其实Android support V4架包已经为我们提供了ViewDragHelper,来辅助我们在自定义ViewGroup时,来处理子View的滑动需求。...1.我们先实例化一个ViewDragHelper对象mDragHelper,可以在onAttachedToWindow()方法初始化,也可以在ViewGroup的构造器初始化。...里面定义了很多回调方法,我们这里只说明我们用到的方法,其他的留给大家自己深入了解学习。...return true; } 最后还有一点工作要做,因为我们知道手指在屏幕上滑动时,会有一个加速度,我们希望做一个减速过程来结束ViewDragHelper的settle,我们可以在computeScroll方法做处理

    65220
    领券