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
- ¿Cuál es la diferencia entre AppBarLayout vs barra de herramientas?
- El margen predeterminado de FloatingActionButton no funciona en lollipop
- ¿Cómo puedo cambiar el tamaño de texto del elemento NavigationView?
- Obtención de la excepción Nullpointer después de actualizar a la compatibilidad con el diseño de Android 22.2.1
- AppCompatSeekBar eliminación de relleno izquierdo y derecho?
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?
- En android cómo configurar la imagen de encabezado de cajón de navegación y el nombre de forma programática en el archivo de clase?
- FloatingActionButton con SnackBar y CoordinatorLayout no funcionará con proguard
- Deshabilitar tabulaciones en TabLayout
- Botón de acción flotante que no se muestra completamente dentro de un fragmento
- Cómo cambiar la posición de etiqueta flotante de TextInputLayout en android
- ¿Hay una manera de establecer el color ondulado para un botón de acción flotante a través de atributos XML?
- Android: textAllCaps = "false" no funciona para el diseño de TabLayout
- Cómo mostrar el indicador de pestaña en la parte superior de las pestañas
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)
- Integrar mi aplicación con el contacto
- ¿Cómo Google consigue posts animados en su aplicación de G +?