Desactivar el desplazamiento de la barra de herramientas

Tengo la configuración actual:

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

Ahora todo funciona como esperado si me desplazo dentro del framelayout que contiene los fragmentos, la barra de herramientas se desliza dentro y fuera como quiero

Ahora el punto es que me gustaría deshabilitar la barra de herramientas de deslizamiento en y fuera si se desplaza el NavView que está en el lado de la framelayout (y dentro de la relativelayout)

Pero no importa si elimino todos los comportamientos de desplazamiento de la barra de herramientas sigue deslizándose dentro y fuera (sólo la manera de deshabilitar es quitar las banderas de desplazamiento de la appbarlayout, pero que desactivar todo el deslizamiento dentro y fuera de la tolbar)

Por favor, ¿qué me falta aquí? ¿No se supone que los comportamientos de scolling pasen los eventos de desplazamiento al CoordinatorLayout?

Lamentablemente, NavigationView contiene NavigationMenuView que es RecyclerView y por lo tanto, admite desplazamiento anidado y mueve AppBarLayout cuando se desplaza. La mejor manera de resolver este problema sería mover NavigationView fuera de CoordinatorLayout . Si no es posible, puede probar el siguiente código, que no he probado.

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

Tenga en cuenta que incluso si este código funciona, puede romperse cuando se actualiza la biblioteca de diseño.

Mueva su NavigationView dentro de un DrawerLayout y el CoordinatorLayout dentro del contenido principal del DrawerLayout.

De los documentos:

NavigationView se coloca típicamente dentro de un 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> 

prueba esto,

Poner esta 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> 

Poner esta 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> 

Ponga this 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> 

Para cualquiera que pudiera estar interesado esto es cómo me ocupé del tema.

He creado mi versión personalizada de la NavigationView copiando los archivos pertinentes de la fuente,

son:

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

Corregir las importaciones para que el nuevo NavigationView apunte a los archivos recién copiados.

Y finalmente agregue este setNestedScrollingEnabled(false) al constructor de NavigationMenuView .

Esto se debe a que @Michael señaló correctamente que NavigationMenuView es un RecyclerView y, como tal, pasa sus eventos de desplazamiento a NestedScrollingParent (el CoordinatorLayout), estableciendo setNestedScrollingEnabled(false) desactivamos este comportamiento y obtenemos el resultado deseado (desplazamiento El NavView no amplía / contrae la AppBar)

  • DrawableLeft se está superponiendo con una sugerencia con TextInputLayout android
  • Color FAB para el fondo No cambia en los dispositivos de versión de Gingerbread
  • CollapsingToolbarLayout no debe colapsar cuando RecyclerView está vacío
  • El estilo TabLayout no puede resolver @ dimen / tab_max_width después de pasar a Android Design Support v23
  • Obtención de error al inflar la clase android.support.design.widget.NavigationView
  • ImageView en CollapsingToolbarLayout no cubre la altura completa?
  • Biblioteca de soporte de diseño de Android con Theme.Material
  • Botón de acción flotante El color del borde no está cambiando
  • Cómo atenuar el fondo cuando se utiliza la parte inferior de la biblioteca de soporte?
  • Configuración del relleno de la barra de estado en NavigationView en Android
  • Fab.show () no animado por primera vez después de inicializar nueva actividad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.