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