Ich möchte ScrollView aktivieren und durch Klicken auf eine Schaltfläche deaktivieren.
Deaktivieren bedeutet, dass die ScrollView nicht vorhanden war. Wenn Sie sie aktivieren, wird die ScrollView zurückgegeben.
Ich möchte das, weil ich eine Galerie mit Textbildern habe und auf eine Schaltfläche klicke, ändert sich die Bildschirmausrichtung, sodass der Text im Querformat größer wird. Und ich möchte die ScrollView, damit sich das Bild nicht selbst dehnt und der Text unlesbar wird.
scrollview.Enabled=false / setVisibility(false)
macht nichts.
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>
Vielen Dank
Edit1: Ich kann Visibility (weg) nicht verwenden, da dadurch auch die Galerie ausgeblendet wird. Ich möchte den Effekt von ScrollView ausblenden. Wenn es ScrollView gibt, werden die Bilder in der Galerie scrollabale und passen nicht in den Bildschirm, so dass Sie scrollen müssen, um das gesamte Bild zu sehen. Ich möchte das nicht deaktivieren / aktivieren, wenn Sie auf eine Schaltfläche klicken.
Ich habe es versucht:
((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);
Trotzdem sind die Bilder in der Galerie scrollbar und passen nicht auf den Bildschirm. Was ist die Lösung dafür?
onTouchEvent(MotionEvent ev)
Ich war diesen Weg gegangen:
quelle
ListView
arbeite umgekehrt: true, wenn das Scrollen deaktiviert ist, und false, wenn es aktiviert ist.Fand diese einfache Lösung gerade eingestellt
quelle
requestDisallowInterceptTouchEvent
funktioniert nur für das untergeordnete Element der Ansicht, das gesperrt werden soll. Also wäre es eher somLinearLayout.requestDisallowInterceptTouchEvent(true);
Deaktivieren Sie ScrollView
quelle
Zu Beginn habe ich den Code verwendet, der im ersten Kommentar veröffentlicht wurde, aber ich habe ihn folgendermaßen geändert:
dann habe ich es auf diese Weise angerufen
weil ich es versucht habe
aber es hieß, dass setIsScrollable undefiniert ist
ich hoffe, dies wird dir helfen
quelle
ScrollView
der Hauptlayoutcontainer Ihrer Layoutklasse sind.Ich habe nicht genug Punkte, um eine Antwort zu kommentieren, aber ich wollte sagen, dass die Antwort von mikec für mich funktioniert hat, außer dass ich sie ändern musste, um zurückzukehren! IsScrollable wie folgt:
quelle
Hier ist eine einfachere Lösung. Überschreiben Sie das
onTouch()
fürScrollView
OnTouchListener
und geben Sie false zurück, wenn Sie den Bildlauf durch Berühren umgehen möchten. Das programmatische Scrollen funktioniert weiterhin und dieScrollView
Klasse muss nicht erweitert werden .quelle
quelle
@JosephEarl +1 Er hat hier eine großartige Lösung, die mit einigen geringfügigen Änderungen für die programmgesteuerte Ausführung perfekt für mich funktioniert hat.
Hier sind die kleinen Änderungen, die ich vorgenommen habe:
LockableScrollView-Klasse:
Hauptaktivität:
quelle
Ich hatte ein Layout über der NestedScrollView, das das Berührungsereignis verbrauchte und den Bildlauf deaktivierte:
und zu aktivieren:
quelle
Sie können eine CustomScrollView erstellen, für die Sie die Interferenz mit anderen Ansichten deaktivieren können. Dies kann jedoch für den Endbenutzer manchmal irritierend sein. Verwenden Sie es mit Vorsicht.
Dies ist der Code:
Wie verwende ich CustomScrollView?
Sie können CustomScrollView als übergeordnetes Element zu dem Bildschirm hinzufügen, in dem Sie eine weitere Bildlaufansicht als untergeordnete Ansicht hinzufügen möchten, und der gesamte Bildschirm kann gescrollt werden. Ich habe dies für ein RelativeLayout verwendet.
Es hat für meinen Fall funktioniert.
quelle
quelle
Hilft das?
quelle
Sie können die Galerie erweitern und mit einem Flag das Scrollen deaktivieren, wenn Sie möchten:
quelle
Wie Sie in der Dokumentation sehen können , können Sie die Sichtbarkeit nicht auf false setzen. In Ihrem Fall sollten Sie wahrscheinlich verwenden:
quelle
auf Schaltfläche klicken Listener einfach tun
Damit wird die Bildlaufleiste beim Klicken auf die Schaltfläche nicht aktiviert
quelle