2016-08-17 3 views
6

Я начал проект с навигационного ящика из базового шаблона 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, чтобы любой мог его протестировать.

DEMO ПРОЕКТ ПО GitHub

https://github.com/ChristopheVersieux/NavFocus

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

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

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

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

ЧТО Я ПРОБОВАЛИ:

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

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

Спасибо большое за ваш Помогите.

+0

Будет ли возможно загрузить изображения для того, что ожидается и что происходит? –

ответ

0

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

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

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

This tutorial on Navigation Drawer (Design Support) поможет вам с такой настройкой в ​​соответствии с последними рекомендациями по материальному дизайну. Альтернативно файлы проекта для учебника можно найти на GitHub.

UPDATE: Как указано, библиотека поддержки v24 создает проблемы с dpad. Возврат к v23 работает отлично.

+0

Здравствуйте, ваше демонстрационное приложение работает, и я обновил свой проект с помощью вашего кода, но проблема все еще происходит на моем. Я подозреваю, что проблема с другой конфигурацией, а не только макет/код Java ... Все еще расследование! https://github.com/ChristopheVersieux/NavFocus –

+1

ОК, это ошибка из библиотеки поддержки! V23.0.0 работает нормально !!!! –

+0

Обновите свой код, чтобы использовать поддержку v24, и он разрушит поведение NavigationView с помощью d-pad. –

Смежные вопросы