Android辅助功能视图Pager读取两个视图



我正在使用Talkback读取ViewPager上视图的内容,它正在读取当前视图的内容和下一个视图的内容(不可见)。

例如

查看1

文本视图->hi1文本视图->bye1

View2

文本视图->hi2文本视图->bye2

对讲读hi1,hi2,bye1,bye2

我试图更改pager.setOffsetScreenPageLimit()的值,但它没有任何作用,Talkback总是读取当前视图和下一个视图,即使OffScreenPageLimited的值是4(它应该读取接下来的2个视图)。

我发现的唯一信息是:https://code.google.com/p/eyes-free/issues/detail?id=139

知道吗?

您可以在OnChangePageView中创建event自定义辅助功能事件,并将要读取的字符串保存在列表中,并从Activity/fragment和适配器之间的接口获取位置。

ViewPager.OnPageChangeListener pageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrollStateChanged(int arg0) { }
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) { }
        @Override
        public void onPageSelected(int position) {
            if(isTalkbackActive(getApplicationContext())) {
                AccessibilityEvent event = AccessibilityEvent.obtain();
                if (onPageChangeInterface != null) {
                    String text = onPageChangeInterface.getTextToRead(position);
                    event.setEventType(AccessibilityEvent.TYPE_ANNOUNCEMENT);
                    event.getText().add(text);
                    viewPagerWallets.requestFocus();
                    viewPagerWallets.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
                    accessibilityManager.sendAccessibilityEvent(event);
                }
            }
        }
    };

然后,您保存的相同字符串将其添加到相对的ContentDescription中,即您只在第一个位置拥有所有视图。

ArrayList readAccessibilityValues = new ArrayList<>();
 String valor = valor + txtView1.getText()+",";
    valor = valor + txtView2.getText()+",";
    if(position == 0) {
        relativeGeneral.setContentDescription(valor);
    }
 readAccessibilityValues.add(valor);

我认为这不是最好的解决方案,但我还没有找到另一个

这可以帮助您进入正确的方向:

pager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
    override fun onPageSelected(position: Int) {
        super.onPageSelected(position)
        val event = AccessibilityEvent.obtain()
        event.eventType = AccessibilityEvent.TYPE_ANNOUNCEMENT
        event.text.add("Hello TalkBack!")
        val accessibilityManager = requireContext().getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager
        accessibilityManager.sendAccessibilityEvent(event)
    }
})

简单地替换";你好,对讲"在ViewPager中更改页面时,您希望读取的任何字符串。

最新更新