首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setTouchExplorationPassthroughRegion()在安卓可访问性API中的用途是什么?

setTouchExplorationPassthroughRegion()在安卓可访问性API中的用途是什么?
EN

Stack Overflow用户
提问于 2021-08-03 07:36:57
回答 1查看 153关注 0票数 2

我正在开发一个使用可访问性服务的Android应用程序,当用户打开特定的应用程序(如钢琴、游戏等)时,我希望禁用按触探索。

我看了setTouchExplorationPassthroughRegion()的API文档

代码语言:javascript
复制
public void setTouchExplorationPassthroughRegion (int displayId, 
                Region region)

启用AccessibilityServiceInfo#FLAG_REQUEST_TOUCH_EXPLORATION_MODE时,此函数请求从屏幕的指定区域开始触摸交互,绕过触摸资源管理器,直接进入视图层次结构。每台显示器只能有一次触摸探索通过区域.请求一个新的触摸探索通过区域清除现有的一个。若要禁用此传递并返回到原始行为,请传入一个空区域。当AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE被禁用时,此函数没有任何效果。

所以我在Android-11中尝试了上面的功能,但是按触摸探索并不会被禁用。在某些应用程序中,我能做些什么来禁用按触探索。

注意:用户可能正在运行他自己的可访问性服务,比如TalkBack屏幕阅读器,它也使用按触摸探索特性。

EN

回答 1

Stack Overflow用户

发布于 2022-08-29 08:06:40

此功能适用于Android 11及以上,并具有适当的上下文和区域。

代码语言:javascript
复制
//Disabling explore by touch
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    setTouchExplorationPassthroughRegion(
            Display.DEFAULT_DISPLAY, getRegionOfFullScreen(name_of_the_view.getContext()));
}

private Region getRegionOfFullScreen(Context context) {
    final DisplayMetrics metrics = new DisplayMetrics();
    final Display display;
    DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
    display = dm.getDisplay(Display.DEFAULT_DISPLAY);
    if (display == null) {
        return new Region();
    } else {
        display.getRealMetrics(metrics);
        return new Region(0, 0, metrics.widthPixels, metrics.heightPixels);
    }
}

如果您的视图未激活或未使用以下代码删除,请不要忘记启用逐点浏览功能

代码语言:javascript
复制
//Enabling explore by touch
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
   setTouchExplorationPassthroughRegion(Display.DEFAULT_DISPLAY, new Region());
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68632056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档