Les désactive fillviewport de défilement horizontalscrollview?
-
24-10-2019 - |
Question
J'ai cette mise en page, et il est mis à l'échelle weirdly (probablement en raison de l'imbrication de la mise en page inadviseable) si je ne l'utilise fillviewport = true dans mon HorizontalScrollView.
Tout fonctionne Peachy (sauf pour la mise à l'échelle impair) lorsque fillviewport = false, mais quand fillviewport = true, la mise à l'échelle est parfait, mais pas de défilement se produit.
Ceci 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 pose généralement pas de désactiver le défilement dans une vue, il fait
Il est juste censé être sûr que le scrollview remplit la fenêtre quelle que soit la taille de son contenu, hein? Je pense que la fenêtre est la zone visible de l'écran, et il y a certainement plus de contenu du bord de la zone visible dans la WebView, je ne peux pas défiler plus.
Je peux voir de logcat que les méthodes de défilement sont appelés, ils ne changent pas l'écran. (À moins que je mets fillviewport à false.)
La solution
Le problème est que vous utilisez « fill_parent », qui signifie « être aussi grand que mes parents. » Utilisation wrap_content de la largeur à la place.
Autres conseils
Je rencontre un problème similaire avec un ScrollView standard contenant une WebView: le défilement ne fonctionnait plus. Changement de fill_parent à wrap_content n'a pas fonctionné pour moi.
L'exemple de Romain Guy fonctionne bien lorsque la vue agrandie est un TextView mais pas quand il est remplacé 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>
Quand j'ajoute une petite quantité de données dans le WebView il semble ok:
Mais quand je remplis WebView avec beaucoup de données, il ne fonctionne pas comme vous pouvez le voir ci-dessous:
Le bouton est toujours affiché et le défilement ne fonctionne plus. En fait, le défilement tactile ne fonctionne pas et les travaux du DPAD ...
Je ne l'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: