¿Existe una alternativa a NestedScrollView para su uso con un WebView?

Cuando se utiliza un WebView dentro de un NestedScrollView hay algunos problemas. El principal que estoy luchando es que los sitios que cargan más contenido a medida que se desplaza hacia abajo no funcionan bien, por ejemplo vimeo.com. También establecer la vista a LAYER_TYPE_HARDWARE no funciona, probablemente por la misma razón, básicamente se bloquea debido a la altura. Por lo tanto, hay una alternativa a la NestedScrollView si quiero utilizar CoordinatorLayout con el fin de contraer la barra de herramientas cuando el usuario se desplaza dentro de la WebView ?

Mi código está abajo. Para reproducir el problema, simplemente cargue vimeo.com y desplácese hasta la parte inferior.

Activity_scrolling.xml

  <android.support.design.widget.AppBarLayout android:id="@+id/app_bar" android:layout_width="match_parent" android:layout_height="@dimen/app_bar_height" android:fitsSystemWindows="true" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/toolbar_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/AppTheme.PopupOverlay"/> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView 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" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.webviewnestedscroll.ScrollingActivity" tools:showIn="@layout/activity_scrolling"> <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent"></WebView> </android.support.v4.widget.NestedScrollView> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/fab_margin" android:src="@android:drawable/ic_dialog_email" app:layout_anchor="@id/app_bar" app:layout_anchorGravity="bottom|end"/> </android.support.design.widget.CoordinatorLayout> 

ScrollingActivity.java

 package com.webviewnestedscroll; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class ScrollingActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scrolling); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); WebView view = (WebView) findViewById(R.id.webview); view.setWebViewClient(new WebViewClient()); WebSettings settings = view.getSettings(); settings.setJavaScriptEnabled(true); settings.setAllowContentAccess(true); settings.setAppCacheEnabled(true); settings.setDatabaseEnabled(true); settings.setDomStorageEnabled(true); settings.setRenderPriority(WebSettings.RenderPriority.HIGH); settings.setJavaScriptEnabled(true); settings.setSupportZoom(true); settings.setJavaScriptCanOpenWindowsAutomatically(true); settings.setBuiltInZoomControls(true); settings.setAppCacheEnabled(true); settings.setAppCachePath(getCacheDir().getAbsolutePath()); settings.setDatabaseEnabled(true); settings.setSupportMultipleWindows(true); settings.setLoadWithOverviewMode(true); settings.setUseWideViewPort(true); settings.setDomStorageEnabled(true); settings.setAllowContentAccess(true); settings.setAllowFileAccess(true); settings.setSaveFormData(true); //view.setLayerType(View.LAYER_TYPE_HARDWARE, null); view.loadUrl("http://vimeo.com"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_scrolling, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } 

EDIT: Olvidé mencionar, ya he intentado envolverlo alrededor de un FrameLayout , LinearLayout , RelativeLayout , etc También he intentado establecer los tamaños a un número específico.

Como me referí , debe intentar agregar LinearLayout con android:descendantFocusability="blocksDescendants" como:

 <android.support.v4.widget.NestedScrollView 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" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.webviewnestedscroll.ScrollingActivity" tools:showIn="@layout/activity_scrolling"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:descendantFocusability="blocksDescendants" > <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent"></WebView> </LinearLayout> </android.support.v4.widget.NestedScrollView> 

Que sea útil para usted. Gracias.

  • Comunicación con vistas Web integradas (UI) en aplicaciones iOS y Android existentes
  • Buscando un menú desplegable en la vista web de Android que esté funcionando
  • Depuración de una WebView de Android desde el PC mediante adb
  • Phonegap uso de la aplicación android cpu en el fondo
  • ¿Cómo forzar que Webview de Android se repinta en los cambios de DOM?
  • Problema de renderizado de WebView en Android KitKat
  • DequeueBuffer: no se puede eliminar varios buffers sin establecer el contador de búfer
  • Webview - Mejor manera de subir imágenes desde el dispositivo
  • Flash dentro de Android WebView - ¿Cómo configuro la pantalla completa de forma automática?
  • ¿Cómo puedo reproducir video html5 en línea en un WebView?
  • Android: ¿Es posible y cómo cambiar el tamaño de letra de una página HTML que se muestra en un WebView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.