0

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

例如

查看 1

TextView -> hi1 TextView -> bye1

视图2

TextView -> hi2 TextView -> bye2

对讲读取 hi1, hi2, bye1, bye2

我试图改变 pager.setOffscreenPageLimit() 的值,但它什么也没做,Talkback 总是读取当前视图和下一个视图,即使 OffScreenPageLimit 的值为 4(它应该读取接下来的 2 个视图)。

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

任何想法?

4

1 回答 1

2

您可以在 OnChangePageView 中创建event自定义 Accessibility 事件,并将要读取的字符串保存在列表中,并从 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);

                }
            }
        }

    };

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

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

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

于 2018-06-05T12:29:37.040 回答