导航抽屉不能仅通过键盘操作



我开发了一个基于;"导航抽屉活动";Android Studio中的模板。然而,我现在发现,用蓝牙键盘打开导航抽屉是不可能的。

起初我以为我错误地删除了代码,但当我创建了一个新项目并在没有任何更改的情况下编译它时,我发现导航抽屉确实不能用键盘操作。我还试过了所有可能的组合键。没有成功。

由于我在编程方面还没有那么丰富的经验,我不知道如何解决这个问题。

就我对模板代码的理解而言,必须修改MainActivity.java中的以下代码才能解决问题。

DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.contactFragment, R.id.imageFragment, R.id.editFieldFragment, R.id.headersFragment, R.id.contrastFragment, R.id.imageButtonFragment, R.id.tabOrderFragment)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
}

如果你需要,你可以在这里找到完整的项目AccessibilityDemo。

有人能帮我解决这个问题吗?

非常感谢。

问候

Petra Ritter

您可以指定一个键来手动切换导航菜单,尽管这不符合一致导航。我生成了一个新的NavDrawer项目,因为我无法在我的机器上运行您的代码。

private fun toggleNav() {
if (binding.drawerLayout.isDrawerOpen(binding.navView)) {
binding.drawerLayout.close()
} else {
binding.drawerLayout.open()
}
}
override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
return when (keyCode) {
KeyEvent.KEYCODE_TAB -> {
toggleNav()
true
}
else -> super.onKeyUp(keyCode, event)
}
}

你可能会发现键盘用户使用Switch Access辅助功能服务,它的工作原理很像TalkBack,但没有音频反馈。在这种情况下,他们可能会突出显示导航菜单图标,并以与TalkBack用户大致相同的方式激活它,但使用选项卡和选择,而不是滑动和双击。

值得注意的是,在对讲和切换访问模式下,关闭菜单(没有键盘(几乎是不可能的。它可能应该出现在问题跟踪器上。

我还看了谷歌的键盘导航指南,他们似乎没有打开导航栏的键盘快捷键。

最新更新