4

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 引き出しを開けるたびに、最初のアイテムに集中したいと思います。私は何が欠けていますか?

4

1 に答える 1

5

どうやら、これは設計支援ライブラリの既知のバグです。

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);
    }
}
于 2016-01-07T14:46:12.877 に答える