2011-03-15 2 views
5

J'ai cette mise en page, et elle est étrangement mise à l'échelle (probablement en raison d'une imbrication de mise en page inadéquate) si je n'utilise pas fillviewport = true dans mon HorizontalScrollView.fillviewport de horizontalscrollview désactive le défilement?

Tout fonctionne Peachy (sauf pour la mise à l'échelle impaire) lorsque fillviewport = false, mais lorsque fillviewport = true, la mise à l'échelle est parfaite mais aucun défilement ne se produit.

C'est la mise en page (Note:.. Je sais que vous n'êtes pas censé mettre un WebView dans un scrollview Mais WebView n'a pas de smoothscrollto ni exposer une méthode setscroller, alors ... 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> 

Réglage android: fillViewport = "true" ne désactive généralement pas le défilement dans une vue, n'est-ce pas?

Il est juste supposé être sûr que le scrollview remplit la fenêtre indépendamment de la taille de son contenu, hein? Je pense que la fenêtre d'affichage est la zone visible de l'écran, et il y a certainement plus de contenu à la périphérie de la zone visible dans le webview, je ne peux plus y faire défiler.

Je peux voir à partir de logcat que les méthodes de défilement sont appelées, elles ne changent tout simplement pas l'écran. (À moins que je mets fillviewport à false.)

+0

Même si vous deviez utiliser les méthodes scrollTo sur le 'HorizontalScrollView', vous ne seriez pas faites défiler le contenu' de WebView' mais le 'WebView' i moi-même. Je pense que tu avais raison de te méfier d'envelopper l'un dans l'autre. –

+1

Je voudrais trouver une autre méthode pour cela, mais pour la vie de moi ne peut pas réaliser un défilement horizontal lisse en utilisant les méthodes intégrées à WebView.:( Comme le but de mon projet est d'afficher html, il n'y a pas vraiment d'autre vue qui ait du sens non plus – Turnsole

Répondre

4

Le problème est que vous utilisez "fill_parent", ce qui signifie "être aussi grand que mon parent." Utilisez plutôt wrap_content pour la largeur.

+0

Wow, je suis gêné d'avoir manqué ça. – Turnsole

2

Je rencontre un problème similaire avec un ScrollView standard contenant un WebView: le défilement ne fonctionnait plus. Changer de fill_parent à wrap_content n'a pas fonctionné pour moi.

L'exemple de Romain Guy fonctionne correctement lorsque la vue développée est une vue TextView, mais pas lorsqu'elle est remplacée par WebView.

Qu'est-ce qui ne fonctionne pas:

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

Lorsque j'ajoute une petite quantité de données dans le WebView il semble ok:

small_data_not_ok1

Mais quand je remplirai WebView avec beaucoup de données, cela ne fonctionne pas comme vous pouvez le voir ci-dessous:

small_data_not_ok2

Le bouton est toujours affiché et le défilement ne fonctionne plus. En fait, le défilement tactile ne fonctionne pas et le défilement fonctionne DPAD ...

Je n'ai pas trouvé aucune raison pour cela, mais j'ai trouvé une solution: il consiste à ajouter un LinearLayout contenant le 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> 

maintenant, il fonctionne très bien:

ok1 ok2

Questions connexes