2011-03-15 7 views
5

Tengo este diseño, y está escalado de forma extraña (probablemente debido a la anidación de diseño desaconsejable) si no uso fillviewport = verdadero en mi HorizontalScrollView.fillviewport de horizontalscrollview desactiva el desplazamiento?

Todo funciona a buen recaudo (excepto en el caso de la escala extraña) cuando fillviewport = false, pero cuando fillviewport = true, la escala es perfecta pero no se produce desplazamiento.

Ésta es la disposición (Nota:.. Sé que no tiene que proporcionar una vista web en un ScrollView Pero en vista web no tiene un smoothscrollto ni exponer 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 android: fillViewport = "true" no suele deshabilitar el desplazamiento en una vista, ¿o sí?

Se supone que es seguro que la vista de desplazamiento 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 la vista web, simplemente no puedo desplazarme hacia ella.

Veo desde Logcat que se están llamando a los métodos de desplazamiento, simplemente no cambian la pantalla. (A menos que establezca fillviewport en falso.)

+0

Incluso si usted fuera a utilizar los métodos scrollTo en el 'HorizontalScrollView', usted no estaría desplazándose por el contenido de' 'WebView' pero el WebView' i tself. Creo que estabas en lo cierto al ser cauteloso de envolver a uno en el otro. –

+1

Me gustaría encontrar otro método para esto, pero por mi vida no puedo lograr un desplazamiento horizontal suave utilizando los métodos integrados en WebView.:( Como el objetivo de mi proyecto es mostrar html, en realidad no hay otra vista que tenga sentido. – Turnsole

Respuesta

4

El problema es que utiliza "fill_parent", que significa "ser tan grande como mi padre". Use wrap_content para el ancho en su lugar.

+0

Wow. Estoy avergonzado de haberlo echado de menos. ¡Pero gracias! – Turnsole

2

Me encuentro con un problema similar con un ScrollView 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 funciona bien cuando la vista expandida es una vista de texto pero no cuando se reemplaza 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> 

Al agregar una pequeña cantidad de datos en la vista web parece bien:

small_data_not_ok1

Pero cuando lleno el WebView con mucha datos, no funciona como se puede ver a continuación:

small_data_not_ok2

El botón siempre se muestra y el desplazamiento ya no funciona. De hecho, el desplazamiento táctil no funciona y funciona el desplazamiento DPAD ...

no he encontrado ninguna razón para eso, pero he encontrado una solución: que consiste en añadir un LinearLayout que contiene la vista Web

<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

Cuestiones relacionadas