gpt4 book ai didi

android - PagerTabStrip TalkBack 辅助功能

转载 作者:太空狗 更新时间:2023-10-29 13:21:16 29 4
gpt4 key购买 nike

我目前正在努力创建具有更多TalkBack 声音的PagerTabStrip。上下文是:

  • 我想为 TalkBack 用户在左侧和右侧选项卡上添加“选项卡 [选项卡名称] 未选中,单击两次以选择”,并将“选项卡 [选项卡名称] 已选中”添加到中间选项卡。
  • 我还想在单击选项卡时添加声音以警告用户其内容已更改并告诉 TalkBack 将焦点放在中心选项卡上。

我已经通过重写所有需要的类(例如:PagerTitleStripViewPagerFragmentPagerAdapter)并添加正确的部分成功地做到了这一点contentDescription 直接在选项卡 TextView 上。它工作得很好,但我不满意。这些类的维护需要为每个新版本的 Android 主类更新(或者我将保留旧设计),我发现每次复制粘贴所有类内容很脏(下一个开发人员呢?)。所以,我尝试了另一种方法:

  • PagerTabStrip 的子类中使用 AccessibilityEvent 为发声提供更多上下文。它不起作用,因为 AccessibilityEvent 中的 getText()getContentDescription 方法未用于发声。
  • 处理 ViewPager 中的 AccessibilityNodeInfo,看看我是否可以解决这个问题。但我没有确定发声的来源(是标签还是内容),也没有确定必须在 AccessiblityNodeInfo 中更改什么才能改变发声。

所以,我想知道是否可以使用子类来解决我的问题,或者我是否别无选择只能复制主类。预先感谢您的帮助。

最佳答案

这其实很简单。您要做的是创建 PagerTabStrip 的子类。在这个子类中,增加可访问性事件的传播以添加您想要的信息!下面是我的实现。

public class A11yPagerTabStrip extends PagerTabStrip {

public A11yPagerTabStrip(Context context) {
super(context);
}

public A11yPagerTabStrip(Context context, AttributeSet attrs) {
super(context, attrs);
}


@Override
public boolean onRequestSendAccessibilityEvent(View child, AccessibilityEvent event) {
Log.wtf(LOG_TAG, "onRequestSendAccessibilityEvent: " + event.toString());

final String textViewTitle = ((TextView) child).getText().toString();
final ViewPager viewPager = (ViewPager) this.getParent();
final int itemIndex = viewPager.getCurrentItem();

String title = viewPager.getAdapter().getPageTitle(itemIndex).toString();

if (textViewTitle.equalsIgnoreCase(title)) {
child.setContentDescription("Tab " + textViewTitle + "selected.");
} else {
child.setContentDescription("Tab " + textViewTitle + "not selected.");
}

return super.onRequestSendAccessibilityEvent(child, event);
}

}

请注意,我覆盖了内容描述。通过这种方式,我们不会更改应用程序的任何可视化表示,只是朗读出来的内容。

注意:对讲用户习惯于“双击选择”部分。正如我在我的代码中所做的那样,我会保留它。

关于android - PagerTabStrip TalkBack 辅助功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28472973/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com