Отключить прокрутку панели инструментов

У меня есть текущая настройка:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/coordiator_layout_in_main" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways"/> </android.support.design.widget.AppBarLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.design.widget.NavigationView android:layout_width="170dp" android:layout_height="match_parent" android:fitsSystemWindows="true"/> <FrameLayout // I place a fragment containing a viewpager containing fragments that contain a recyclerview.... android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_toRightOf="@+id/nav_view"> </FrameLayout> </RelativeLayout> <FrameLayout android:id="@+id/settings_frame" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="invisible"> </FrameLayout> <android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_refresh" app:layout_anchor="@id/coordiator_layout_in_main" app:layout_anchorGravity="bottom|right|end" app:layout_behavior="com.material.widget.MyFloatingActionButtonBehavior" /> </android.support.design.widget.CoordinatorLayout> 

Теперь все работает так, как ожидалось, если я прокручиваю внутри рамки, содержащего фрагменты, панель инструментов скользит взад и вперед, как я хочу

Теперь дело в том, что я хотел бы отключить панель инструментов, вдвигающуюся и выходящую, если я прокручу NavView, который находится на стороне framelayout (и внутри relativelayout)

Но независимо от того, удаляю ли я все прокручивающие действия, панель инструментов продолжает перемещаться и выходить (только для того, чтобы отключить ее, удалите флажки прокрутки из панели appbarlayout, но это отключит все скользящие в и из tolbar)

Пожалуйста, что мне здесь не хватает? Разве поведение scolling не должно пропускать события прокрутки в CoordinatorLayout?

Solutions Collecting From Web of "Отключить прокрутку панели инструментов"

К сожалению, NavigationView содержит NavigationMenuView который является RecyclerView и поэтому поддерживает вложенную прокрутку и перемещает AppBarLayout при прокрутке. Лучший способ решить эту проблему – переместить NavigationView из CoordinatorLayout . Если это невозможно, вы можете попробовать следующий код, который я не тестировал.

 final RecyclerView navigationMenuView = (RecyclerView) findViewById(R.id.design_navigation_view); navigationMenuView.setNestedScrollingEnabled(false); 

Пожалуйста, учтите, что даже если этот код работает, он может сломаться при обновлении библиотеки Design.

Переместите навигационное меню внутри DrawerLayout и CoordinatorLayout внутри основного содержимого DrawerLayout.

Из документов:

NavigationView обычно размещается внутри DrawerLayout.

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <!-- Your contents --> <android.support.design.widget.NavigationView android:id="@+id/navigation" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:menu="@menu/my_navigation_items" /> </android.support.v4.widget.DrawerLayout> 

попробуй это,

Поместите этот Activity_screen.xml

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:openDrawer="start"> <include layout="@layout/app_bar_screen" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_home_screen" app:itemIconTint="@color/app_theme_color" app:menu="@menu/activity_home_screen_drawer" /> </android.support.v4.widget.DrawerLayout> 

Поместите это app_bar_screen.xml

  <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="com.test.app.HomeScreenActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay"/> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_screen" /> </android.support.design.widget.CoordinatorLayout> 

Поместите этот content_screen.xml

  <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:showIn="@layout/app_bar_home_screen" android:id="@+id/content_frame" android:background="@android:color/white" tools:context="com.test.app.HomeScreenActivity"> </RelativeLayout> 

Для любого, кто может быть заинтересован, так это то, как я занимался этой проблемой.

Я создал свою пользовательскую версию NavigationView, скопировав соответствующие файлы из источника,

они есть:

  • NavigationView.java
  • NavigationMenuItem.java
  • NavigationMenuPresente.java
  • NavigationMenuView.java
  • ThemeUtils.java

Исправьте импорт, чтобы новый NavigationView указывал на недавно скопированные файлы.

И, наконец, добавьте этот setNestedScrollingEnabled(false) в конструктор NavigationMenuView .

Это связано с тем, что, как Майкл правильно указал, что NavigationMenuView является RecyclerView, и поэтому он передает свои события прокрутки в NestedScrollingParent (CoordinatorLayout), устанавливая setNestedScrollingEnabled(false) мы отключили это поведение, и мы получаем желаемый результат (прокрутка NavView не расширяет / сворачивает AppBar)