¿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.
- Cómo cargar una página web externa dentro de WebView
- Cómo guardar la URL actual en Android Kivy Application
- Acceso al código JS desde una aplicación nativa de Android
- Android reproducir video de youtube en la vista web
- Cargar archivo .HTML local con WebView
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.
- Android WebView no carga una URL HTTPS
- WebView no carga la página web
- Problema de enfoque de Android WebView
- WebView y HTML5 <video>
- Uso de shadow-dom (Polymer) en Android 4.4 Webview
- Android: la aplicación Web funciona en Chrome, pero no en Webview
- La página de vista web de Android no carga correctamente la página
- los vídeos de iframe no irán al modo de pantalla completa en la vista web de Android
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.
- Android – consiga DocumentFile con acceso de escritura para cualquier trayectoria del archivo en la tarjeta del sd (tener allready ganado permiso de la tarjeta del sd)
- Pantalla de inicio de sesión que muestra progressdialog y permite cambiar la orientación de la pantalla