vue de défilement à deux directions
Je voudrais avoir un linearlayout avec une section d'en-tête en haut et une webview ci-dessous. L'en-tête sera courte et la webview peut être plus longue et plus large que l'écran.
Quelle est la meilleure façon d'obtenir un défilement horizontal et vertical? Est un ScrollView imbriquée à l'intérieur d'un HorizontalScrollView une bonne idée?
source d'informationauteur George Bailey
Vous devez vous connecter pour publier un commentaire.
Oui, et non.
Oui, ma compréhension est que
ScrollView
etHorizontalScrollView
peuvent être imbriquées.Pas, autant que je sache, ni
ScrollView
niHorizontalScrollView
travailler avecWebView
.Je suggère que vous avez votre
WebView
ajustement sur l'écran.Deux ans, pour aller plus loin, je pense que la communauté open source pourrait avoir à votre secours:
2D de Défilement de la Vue.
Edit: Le Lien ne fonctionne plus, mais voici un lien vers une ancienne version de l'article sur le blog;
il existe une autre manière. moddified HorizontalScrollView comme un wrapper pour ScrollView. normal HorizontalScrollView lorsque la capture des événements tactiles ne pas les transmettre à ScrollView et vous ne pouvez faire défiler une façon à la fois. voici la solution:
à l'aide de:
J'ai cherché vraiment de temps pour faire ce travail, et enfin trouvé ce fil ici. wasikuss réponse est venu très près de la solution, mais encore il ne fonctionne pas correctement. Voici comment cela fonctionne très bien (au moins pour moi (Android 2.3.7)). J'espère qu'il fonctionne sur toute autre version d'Android.
Créer une classe appelée VScrollView:
Votre mise en page doit ressembler à:
Dans votre activité, vous devez faire quelque chose comme:
... et c'est la façon dont il fonctionne. Au moins pour moi.
Il est facile de solution de contournement:
Dans l'activité " obtenir une référence à l'extérieur de la scrollView (je vais supposer une verticale de la scrollview) et une référence à la naissance du premier enfant, que faites défiler la vue.
On pourrait arguer que cette solution est un peu hacky. Mais il a beaucoup travaillé pour moi dans plusieurs applications!
En retard pour répondre, mais j'espère que pourrait être utile à quelqu'un.
Vous pouvez consulter droid-uiscrollview. C'est fortement basé sur @MrCeeJ de l' réponse, mais il me semblait avoir beaucoup de mal à obtenir le contenu réel d'être rendu. D'où j'ai tiré dans la dernière source de HorizontalScrollView & Le ScrollView pour créer droid-uiscrollview. Il y a quelques
todo's
gauche que je n'ai pas eu l'occasion de le terminer, mais il suffit d'obtenir le contenu de défilement horizontale & verticalement en même tempsJ'ai essayer les deux wasikuss et user1684030 solutions et j'ai dû m'adapter, car un avertissement journal:
HorizontalScrollView: Invalid pointerId=-1 in onTouchEvent
et parce que je n'étais pas fan de ce besoin de créer 2 faites défiler jusqu'vues.Donc, voici ma classe:
Et lors de l'utilisation en XML, vous n'avez rien à faire si le contenu de ce défilement de l'affichage est défini ici. Sinon, il vous suffit d'appeler la méthode
setContent(View content)
afin de laisser cetteScrollView2D
sait quel est son contenu.Par exemple:
Pour un certain temps, j'ai essayé des solutions à partir d'ici, mais celui qui a le mieux fonctionné y avait toujours un problème: Il a mangé tous les événements, aucun n'a été en rendant grâce à des éléments dans la barre de défilement.
Donc j'ai ... encore une autre réponse, dans Github et bien commenté au moins, espérons-le: https://github.com/Wilm0r/giggity/blob/master/app/src/main/java/net/gaast/giggity/NestedScroller.java
Comme toutes les solutions, c'est imbriquée HorizontalScrollview (extérieur) + ScrollView (intérieure), à l'extérieur de la réception des événements tactiles d'Android, et de l'intérieur de leur réception à l'intérieur, à partir de l'extérieur de la vue.
Pourtant, je suis plutôt sur la ScrollViews de décider si un événement tactile est intéressant, et jusqu'à ce qu'ils l'accepter, ne rien faire pour touches (par exemple les robinets pour ouvrir les liens dans/etc) peuvent encore le faire à l'enfant-éléments.
(Également le point de vue prend en charge pincer pour zoomer dont j'avais besoin.)
À l'extérieur scroller:
vscroll ici est le "InnerScroller", sous-classé de ScrollView, avec quelques changements à la gestion des événements: j'ai fait des choses terribles pour assurer entrant événements tactiles directement à partir d'Android sont rejetés, et au lieu de cela, il ne fera que prendre de l'extérieur de la classe, et seulement ensuite passer à ceux de la super-classe:
Je sais que vous avez accepté votre réponse, mais peut-être cela peut vous donner une idée.