对于选项卡本身,如果您负责膨胀视图,那么您可以使用自定义 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>
这预先假设您(或您正在使用的库)在选中时标记选项卡视图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"
.
此答案中给出了自定义使用提示的其他方法。