Постоянная навигацияНастройка свободного фокуса после выбора элемента

Я начал проект с помощью навигационного ящика из базового шаблона Android Studio. Единственное, что я сделал, это показать его как постоянный, чтобы иметь планшет / телевизор.

Чтобы достичь этого, единственная модификация, которую я сделал, была в макете xml. Это позволяет навигатору всегда быть видимым.

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="300dp" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/app_bar_main" android:layout_width="match_parent" android:layout_height="match_parent" /> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="Content will come here" /> </LinearLayout> </LinearLayout> 

Я также поставил проект на Github, чтобы любой мог его протестировать.

ПРОЕКТ ДЕМО НА ГИТУМЕ

https://github.com/ChristopheVersieux/NavFocus

ЧТО ПРОИСХОДИТ

Моя проблема возникает, когда я начинаю выбирать элементы в ящике с помощью D-pad. Как только элемент выбран, фокус полностью потерян. Попытка вернуться в ящик и получить фокус кажется очень трудной, и я должен попробовать несколько раз с помощью стрелок вправо / влево

ЧТО ОЖИДАЕТСЯ:

Ящик должен держать фокус, или фокус должен быть легко возвращен в ящик.

ЧТО Я СКАЗАЛ:

Простейшая идея, которую я имел, заключалась в том, чтобы заставить ящик снова получить фокус, но этот код ничего не меняет:

 navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { menuItem.setChecked(true); //This is where I will replace the Fragments in the right area. navigationView.clearFocus(); navigationView.requestFocus(); return true; } }); 

Большое спасибо за вашу помощь.

Solutions Collecting From Web of "Постоянная навигацияНастройка свободного фокуса после выбора элемента"

Я бы начал с удаления android:layout_gravity="start" Это просто не нужно, поскольку его родительский объект является горизонтальным LinearLayout.

Навигационный ящик должен быть постоянно виден на планшетах и ​​телевизорах. Они остаются скрытыми для мобильных устройств. Они являются частью руководства по дизайну материалов.

Это требует совсем другой настройки по сравнению с тем, что я вижу в вашем проекте на GitHub. Что включает в себя предоставление разных ресурсов с использованием квалификаторов.

Этот учебник по навигационному ящику (поддержка дизайна) поможет вам с точно такой настройкой в ​​соответствии с последними рекомендациями по материальному дизайну. В качестве альтернативы файлы проекта для учебника можно найти на GitHub .

ОБНОВЛЕНИЕ: Как указано, библиотека поддержки v24 создает проблемы с dpad. Возвращение к v23 отлично работает.