Hacer AppBarLayout responder a desplazamiento en WebView
En la biblioteca de soporte de diseño (desde I / O), Google presentó el AppBarLayout. Estoy tratando de hacer que la barra de herramientas de animar fuera de la pantalla cuando el usuario se desplaza a través de un sitio web en un WebView en un fragmento. Funciona cuando pongo mi elemento WebView dentro de un NestedScrollView, pero eso hace que se desplace a través del buggy de WebView y haga imposible pellizcar a zoom. ¿Cómo puedo hacer que el AppBarLayout responda (animar lejos cuando se desplaza hacia abajo, volver al desplazarse hacia arriba, al igual que en NestedScrollView) a la WebView? Estos son mis archivos XML: El diseño principal:
<android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true" android:id="@+id/main_coordinatorlayout"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:id="@+id/appBarLayout"> <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:id="@+id/toolbar" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/Theme.AppCompat.Light" app:layout_scrollFlags="scroll|enterAlways"/> <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tabLayout"/> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/viewPager" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_anchor="@id/viewPager" app:layout_anchorGravity="bottom|right|end" app:borderWidth="0dp" android:layout_margin="16dp" android:src="@drawable/ic_action_autorenew" />
El código de mi fragmento que contiene la webview:
- Cambiando el color de fondo del menú desplegable de la acción
- Autocompletar no funciona en archivos XML en una jerarquía particular
- ¿Se puede utilizar GradientColor para definir un gradiente para un relleno o trazo enteramente en XML?
- Android: Alineación de cuatro cuadrados
- El teclado virtual cubre un EditText en un PopupWindow
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/webView" android:layout_gravity="center_horizontal" app:layout_behavior="@string/appbar_scrolling_view_behavior" />
¡Gracias por adelantado!
- Android: establece una vista para estar encima de los elementos dibujados con lienzo
- Android LinearGradient XML
- Actividad de configuración botón Arriba
- Problemas de procesamiento @ id / visible Android Studio
- Cambiar la transición de navegación igual que Volver o Cerrar
- La animación de vista de Android se detiene al salir de la pantalla
- XML tiene cuerpo vacío?
- El archivo de diseño de Android no permite caracteres como &, <,>
Gracias a @ torque203 por proporcionar esta respuesta. Estoy repostando esto para reunir más atención.
Puede ampliar la visualización web e implementar NestedScrollingChild. Por ejemplo, puede utilizar el objeto NestedWebView que se encuentra en este proyecto Github .
A partir de ahí, puede actuar como si fuera una Vista normal que admita Desplazamiento anidado, como RecyclerView:
<your.package.name.NestedWebView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" />
En mi caso de uso, esto funcionó bien.
Una vez más, los créditos a @ torque203 para encontrar este proyecto Github.
Las cosas colocadas dentro de CoordinatorLayout deben ser diseñadas e implementadas para trabajar con él o no se coordinará con ninguna otra vista de hermano. Pero bueno … La barra de herramientas no está diseñada para eso. AppBarLayout es sólo un componente que está preparado para que Toolbar funcione perfectamente con CoordinatorLayout.
LinearLayout no está diseñado para trabajar con CoordinatorLayout.It es más fácil, sólo tiene que agregar un atributo a la LinearLayout diciendo su comportamiento de desplazamiento
<LinearLayout ... app:layout_behavior="@string/appbar_scrolling_view_behavior" ... >
Puede intentar que AppBarLayout responda al WebView por este
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Ya que ScrollView es ahora un hijo directo de CoordinatorLayout.
<android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" app:layout_behavior="@string/appbar_scrolling_view_behavior" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > ... </LinearLayout>
ScrollView no fue diseñado para trabajar con CoordinatorLayout (de nuevo). Necesita usar el otro, NestedScrollView, proporcionado en Android Support Library v4, que está diseñado para trabajar con CoordinatorLayout desde que nació.
Y con la misma razón, tenga en cuenta que el ListView clásico no funciona con CoordinatorLayout también. Sólo funciona RecyclerView.