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).

¿Fue útil?

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:

small_data_not_ok1

Pero cuando lleno la vista web con muchos datos, no funciona como puede ver a continuación:

small_data_not_ok2

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:

ok1 ok2

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top