Vek*_*r88 4 android android-support-library androiddesignsupport android-navigationview
我想开发一个即使使用 dpad 也能 100% 运行的应用程序,但不适用于电视设备,所以我不想依赖 Leanback 库。我已经遵循了这里的指南,以便集中我的 UI 的正确元素。
\n\n我正在使用支持设计库,但我的设计遇到了一些问题NavigationView:
这就是我正在做的处理焦点的事情:
\n\nprivate void initDrawer(){\n drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);\n navigationView = (NavigationView)findViewById(R.id.navigation_view);\n navigationView.setNavigationItemSelectedListener(this);\n drawerToggle = new ActionBarDrawerToggle(MainActivity.this, drawerLayout, R.string.app_name, R.string.app_name){\n @Override\n public void onDrawerOpened(View drawerView) {\n super.onDrawerOpened(drawerView);\n //This is not working properly\n navigationView.requestFocus();\n }\n\n @Override\n public void onDrawerClosed(View drawerView) {\n super.onDrawerClosed(drawerView);\n //This seems to work\n mContentLayout.requestFocus();\n }\n };\n drawerLayout.setDrawerListener(drawerToggle);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这就是我正在做的使用硬件按钮切换抽屉打开/关闭的操作:
\n\n@Override\npublic boolean onKeyUp(int keyCode, KeyEvent event){\n if(keyCode==KeyEvent.KEYCODE_BUTTON_Y){\n drawerToggle.syncState();\n if(drawerLayout.isDrawerOpen(GravityCompat.START)){\n drawerLayout.closeDrawer(GravityCompat.START);\n }\n else {\n drawerLayout.openDrawer(GravityCompat.START);\n }\n return true;\n }\n else return super.onKeyUp(keyCode, event);\n}\nRun Code Online (Sandbox Code Playgroud)\n\nNavigationView每次打开抽屉时,我想将第一个项目聚焦在 \xc2\xa0 上。我缺少什么?
显然,这是设计支持库的一个已知错误。
Google 声称已在 23.1.1 中修复该问题,但它不起作用。
我必须在我的onDrawerOpened方法中进行这些更改:
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if(navigationView.requestFocus()){
NavigationMenuView navigationMenuView = (NavigationMenuView)navigationView.getFocusedChild();
navigationMenuView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
508 次 |
| 最近记录: |