对于选项卡本身,如果您负责为 View 充气,那么您可以使用自定义 TextView,根据其激活(或选择)状态修改其内容描述:
public class TabTextView extends TextView {
public TabTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public CharSequence getContentDescription() {
CharSequence contentDescription = super.getContentDescription();
return isActivated() ? appendSelectedTo(contentDescription) : contentDescription;
}
private String appendSelectedTo(CharSequence contentDescription) {
return getResources().getString(R.string.tab_selected, contentDescription);
}
}
R.string.tab_selected 是 <string name="tab_selected">%1$s selected</string>
这假定您(或the library you're using)在选中时用setActivated(true)/setSelected(true) 标记标签视图(以及用setActivated(false)/setSelected(false) 标记所有其他标签)。
向用户宣布内容已更改的最简单方法是添加一个ViewPager.OnPageChangeListener,以在页面更改时进行通知:
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// TODO: format correctly with String resource to support translation
viewPager.announceForAccessibility("Showing " + viewPager.getAdapter().getPageTitle(position));
}
});
我知道 Android TalkBack 用户已经习惯了这种行为,但没有指明可点击的内容
(默认情况下)有一个关于可点击元素的指示,如 @ChrisCM 所述 - TalkBack 将在附加了 View.OnClickListener 的视图上附加“双击激活”(以前是“双击选择”)。
您可以通过覆盖 onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) 方法来修改 TalkBack 使用辅助功能委托大声朗读的操作:
class TabAccessibilityDelegate extends AccessibilityDelegateCompat {
@Override
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {
super.onInitializeAccessibilityNodeInfo(host, info);
info.addAction(
new AccessibilityNodeInfoCompat.AccessibilityActionCompat(
AccessibilityNodeInfoCompat.ACTION_CLICK,
"select tab"
)
);
}
}
并在每个标签视图上设置它:
ViewCompat.setAccessibilityDelegate(tabView, new TabAccessibilityDelegate());
现在 TalkBack 将显示为:"<tab content description>... double tap to select tab"。
this answer中给出了自定义使用提示的其他方式。