dpad を使用しても 100% 機能するが、TV デバイスでは機能しないアプリケーションを開発したいので、Leanback ライブラリに依存したくありません。UI の適切な要素に焦点を当てるために、ここのガイドラインに従っています。
サポート デザイン ライブラリを使用していますが、次のようないくつかの問題がありますNavigationView
。
- ドロワーを初めて開いたとき、最初のアイテムはチェックされているが、別のアイテムがフォーカスされている
- 引き出しを閉じて再度開くと、チェックされているアイテムがなく、フォーカスが失われます
これは、フォーカスを処理するために私がやっていることです:
private void initDrawer(){
drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
navigationView = (NavigationView)findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(this);
drawerToggle = new ActionBarDrawerToggle(MainActivity.this, drawerLayout, R.string.app_name, R.string.app_name){
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
//This is not working properly
navigationView.requestFocus();
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
//This seems to work
mContentLayout.requestFocus();
}
};
drawerLayout.setDrawerListener(drawerToggle);
}
これは、ハードウェア ボタンを使用して引き出しの開閉を切り替えるために私が行っていることです。
@Override
public boolean onKeyUp(int keyCode, KeyEvent event){
if(keyCode==KeyEvent.KEYCODE_BUTTON_Y){
drawerToggle.syncState();
if(drawerLayout.isDrawerOpen(GravityCompat.START)){
drawerLayout.closeDrawer(GravityCompat.START);
}
else {
drawerLayout.openDrawer(GravityCompat.START);
}
return true;
}
else return super.onKeyUp(keyCode, event);
}
NavigationView
引き出しを開けるたびに、最初のアイテムに集中したいと思います。私は何が欠けていますか?