タブ自体については、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>
これは、あなた(またはあなたが使用しているライブラリ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 が述べたように、クリック可能な要素には (デフォルトで) 表示があります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"
.
使用上のヒントをカスタマイズするその他の方法については、この回答を参照してください。