Permanent NavigationView loose focus after an item is selected

筅森魡賤 提交于 2019-12-22 05:55:00

问题


I started a project with a Navigation Drawer from the basic template of Android Studio. The only modification I made was to display it as permanent in order to have a tablet/TV layout.

To achieve this, the only modification I made was in the xml layout. This allow the NavigationView to be always visible.

<?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>

I also put the project on Github, so anyone can test it.

PROJECT DEMO ON GITHUB

https://github.com/ChristopheVersieux/NavFocus

WHAT IS HAPPENING

My issue comes when I start selecting items on the drawer with the D-pad. Once an item is selected, the focus is completely lost. Trying to get back to the Drawer and get focus seems very hard and I have to try several times with right/left arrows

WHAT IS EXPECTED:

Drawer should keep focus, or focus should be easy to bring back to the Drawer.

WHAT I TRIED:

The simplest Idea I had was to force the Drawer to get focus again, but this code doesn't change anything:

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

Thank a lot for your help.


回答1:


I would start by removing android:layout_gravity="start" This is simply not needed as its parent is a horizontal LinearLayout.

The Navigation Drawer must be permanently visible on Tablets and TV. They stay hidden for mobile. These are part of the Material Design guidelines.

This requires quite a different setup compared to what I see in your project on GitHub. Which includes supplying different resources using qualifiers.

This tutorial on Navigation Drawer (Design Support) will help you with exactly that setup, as per the latest Material Design guidelines. Alternatively the project files for the tutorial can be found on GitHub.

UPDATE: As pointed out, Support library v24 creates issues with the dpad. Reverting to v23 works just fine.



来源:https://stackoverflow.com/questions/38992356/permanent-navigationview-loose-focus-after-an-item-is-selected

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!