Je voudrais activer ScrollView et le désactiver par un clic de bouton.
Désactiver signifie comme si le ScrollView n'était pas là ... et l'activer renvoie le ScrollView.
Je veux cela parce que j'ai une galerie avec des images de texte, et sur un bouton cliquez sur l'orientation de l'écran change, donc dans Paysage le texte devient plus grand. Et je veux le ScrollView pour que l'image ne s'étire pas d'elle-même et que le texte devienne illisible.
scrollview.Enabled=false / setVisibility(false)
ne fait rien.
xml:
<ScrollView
android:id="@+id/QuranGalleryScrollView"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<Gallery android:id="@+id/Gallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="horizontal"></Gallery>
</ScrollView>
Merci
Edit1: Je ne peux pas utiliser la visibilité (partie) car cela masquerait également la galerie, ce que je veux, c'est masquer l'effet du ScrollView. Lorsqu'il y a ScrollView, les images de la Galerie deviennent scrollabale et ne rentrent pas dans l'écran, vous devez donc faire défiler pour voir l'image entière, je ne veux pas désactiver / activer cela en cliquant sur un bouton.
J'ai essayé ceci:
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setOnTouchListener(null);
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setHorizontalScrollBarEnabled(false);
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setVerticalScrollBarEnabled(false);
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setEnabled(false);
Mais les images de la Galerie sont toujours défilantes et ne correspondent pas à l'écran. Quelle est la solution à cela?
onTouchEvent(MotionEvent ev)
J'étais allé par ici:
la source
ListView
fonctionne dans le sens inverse: true lorsque le défilement est désactivé et false lorsqu'il est activé.J'ai trouvé cette solution simple juste définie
la source
requestDisallowInterceptTouchEvent
fonctionne uniquement pour que l' enfant de la vue soit verrouillé. Donc, ce serait plutôtmLinearLayout.requestDisallowInterceptTouchEvent(true);
Désactiver ScrollView
la source
pour commencer, j'ai utilisé le code publié dans le premier commentaire mais je l'ai changé comme ceci:
alors je l'ai appelé de cette façon
parce que j'ai essayé
mais il a dit que setIsScrollable n'est pas défini
J'espère que cela t'aidera
la source
ScrollView
le conteneur de disposition principal de votre classe de disposition.Voici une solution plus simple. Remplacez
onTouch()
pourScrollView
OnTouchListener
et retournez false si vous souhaitez contourner le défilement au toucher. Le défilement programmatique fonctionne toujours et il n'est pas nécessaire d'étendre laScrollView
classe.la source
Je n'ai pas assez de points pour commenter une réponse, mais je voulais dire que la réponse de mikec a fonctionné pour moi sauf que j'ai dû la changer pour revenir! IsScrollable comme ceci:
la source
la source
@JosephEarl +1 Il a une excellente solution ici qui a parfaitement fonctionné pour moi avec quelques modifications mineures pour le faire par programme.
Voici les modifications mineures que j'ai apportées:
Classe LockableScrollView:
Activité principale:
la source
J'avais une disposition sur le NestedScrollView consommant l'événement tactile et désactivant le défilement:
et pour activer:
la source
Vous pouvez créer un CustomScrollView, pour lequel vous pouvez désactiver son interférence avec d'autres vues. Bien que cela puisse parfois être irritant pour l'utilisateur final. Utilisez-le avec prudence.
Voici le code:
Comment utiliser le CustomScrollView?
Vous pouvez ajouter CustomScrollView en tant que parent à l'écran dans lequel vous souhaitez ajouter un autre Scrollview en tant que vue enfant, et tout l'écran peut faire défiler. J'ai utilisé ceci pour un RelativeLayout.
Cela a fonctionné pour mon cas.
la source
la source
est-ce que cela aide?
la source
Vous pouvez étendre la galerie et utiliser un indicateur pour désactiver le défilement quand vous le souhaitez:
la source
Comme vous pouvez le voir dans la documentation , vous ne pouvez pas définir la visibilité sur false. Dans votre cas, vous devriez probablement utiliser:
la source
sur le bouton, cliquez sur l'auditeur
pour que la barre de défilement ne soit pas activée lors d'un clic sur le bouton
la source