¿FillViewport de HorizontalsCrollView desactiva el desplazamiento?
-
24-10-2019 - |
Pregunta
Tengo este diseño, y se escala extrañamente (probablemente debido a la anidación de diseño no acumulable) si no uso FillViewPort = True en mi HorizontalsCrollView.
Todo funciona Peachy (excepto la escala impar) cuando FillViewPort = false, pero cuando FillViewPort = true, la escala es perfecta pero no ocurre un desplazamiento.
Este es el diseño (nota: sé que no se supone que no debe poner una WebView en una vista de desplazamiento. Pero WebView no tiene un SmoothScrollTo ni expone un método SetScroller, así que ... Bleh).
<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webContainer"
android:layout_below="@+id/titlebar"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
<WebView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webZ"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</HorizontalScrollView>
Configuración de Android: FillViewPort = "True" no suele deshabilitar el desplazamiento en una vista, ¿verdad?
Se supone que debe estar seguro de que ScrollView llena la ventana gráfica independientemente del tamaño de su contenido, ¿eh? Creo que la ventana gráfica es el área visible de la pantalla, y definitivamente hay más contenido fuera del borde del área visible en WebView, ya no puedo desplazarme a ella.
Puedo ver en LogCat que se llaman los métodos de desplazamiento, simplemente no cambian la pantalla. (A menos que establezca FillViewPort en falso).
Solución
El problema es que usa "Fill_parent", que significa "ser tan grande como mi padre". Use WRAP_CONTENT para el ancho en su lugar.
Otros consejos
Encuentro un problema similar con una vista de desplazamiento estándar que contiene una WebView: el desplazamiento ya no funcionaba. El cambio de fill_parent a wrap_content no funcionó para mí.
El ejemplo de Romain Guy está funcionando bien cuando la vista expandida es una vista de texto, pero no es cuando es reemplazado por WebView.
Lo que no funciona:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:orientation="vertical">
<WebView android:id="@+id/webview"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_weight="1.0">
</WebView>
<Button
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="Click">
</Button>
</LinearLayout>
</ScrollView>
Cuando agrego una pequeña cantidad de datos en la vista web, parece estar bien:
Pero cuando lleno la vista web con muchos datos, no funciona como puede ver a continuación:
El botón siempre se muestra y el pergamino ya no funciona. De hecho, el desplazamiento táctil no funciona y el desplazamiento DPAD funciona ...
No encontré ningún motivo para eso, pero encontré una solución: consiste en agregar un LinearLayout que contiene el WebView
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout android:id="@+id/linearlayout"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_weight="1.0"
android:orientation="vertical">
<WebView android:id="@+id/webview"
android:layout_width="fill_parent" android:layout_height="wrap_content">
</WebView>
</LinearLayout>
<Button
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="Click">
</Button>
</LinearLayout>
</ScrollView>
Ahora funciona bien: