3

Я хочу разработать приложение, которое может быть на 100% функциональным даже с помощью dpad, но не для ТВ-устройств, поэтому я не хочу полагаться на библиотеку Leanback. Я уже придерживался рекомендаций here, чтобы сфокусировать правильные элементы моего пользовательского интерфейса.Правильное создание dpad-совместимого интерфейса

Я использую библиотеку поддержки проектирования и у меня несколько вопросов, с моей 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 каждый раз я открываю ящик. Что мне не хватает?

ответ

3

Это, по-видимому, known bug библиотеки поддержки дизайна.

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); 
    } 
}