设置选项菜单的内容描述 android Talkback

Setting content description for option menu android Talkback

我正在为应用程序实现“Read Aloud”或“Talkback”。一切都在使用 contentDescription 文本,但在选项菜单中,我找不到与 contentDescription 相关的任何内容,我希望系统读取 "Menu "+ item's name.

EX:我的菜单有 2 个项目:“创建新文件夹”和“删除当前文件夹”,目前,当我关注一个菜单项(支持轨迹球和蓝牙键),系统可以准确地说出菜单的文本。但我希望它更像是“1:菜单创建新文件夹”和“2:菜单删除当前文件夹”。

那么,如何更改已读文本?如何在蓝牙键盘按下 UP/DOWN 键时获得焦点 menu item

据我调查,在Android内部源码中,classActionMenuItemView.java方法setTitle(CharSequence title),源码也设置了setContentDescription(title),所以Android 将默认读取您的 MenuItem 的文本。我不知道为什么核心在这种情况下如此不灵活。

更新:

感谢

似乎 Google 刚刚在 API 26 (Android O).[=21] 上将 setContentDescription(CharSequence contentDescription) 方法添加到 MenuItem class =]

更新: 感谢新 。 看起来所有版本现在都支持 setContentDescription 使用 android support v4 库的菜单项。

他们似乎刚刚在 API 上将 setContentDescription(CharSequence contentDescription) 方法添加到 MenuItem class 26 (Android O)

v4 支持库中的 MenuItemCompat 有一个

android.support.v4.view.MenuItemCompat.setContentDescription(MenuItem menuItem, CharSequence contentDescription) 

在 Oreo 之前的设备上向后兼容的方法。

对于 AndroidX,请参阅此答案:

回答postAndroidX

androidx.core.view.MenuItemCompat.setContentDescription(menuItem,  contentDescription)

完整样本:

@Override
public void onCreateOptionsMenu(@NonNull Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.client_menu_close, menu);
    super.onCreateOptionsMenu(menu, inflater);

    MenuItem closeMenu = menu.findItem(R.id.client_menu_close_action);
    androidx.core.view.MenuItemCompat.setContentDescription(closeMenu, R.string.str_accessibility_client_screen_close);
}