我正在使用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中更改页面时,您希望读取的任何字符串。