Ich habe ViewPager und darunter habe ich 10 Schaltflächen. Wenn ich auf die Schaltfläche klicke, z.B. #4, geht der Pager sofort zur Seite #4, indem ich mPager.setCurrentItem(3);
. Aber ich möchte das Blättern durch horizontales Wischen mit dem Finger deaktivieren. So wird das Blättern durchgeführt NUR indem Sie auf die Schaltflächen klicken. Wie kann ich also das Streichen mit dem Finger deaktivieren?
Antworten
Zu viele Anzeigen?Wenn Sie ViewPager2 verwenden, müssen Sie nur die Option:
viewpager.setUserInputEnabled(false);
Desde el docs :
Aktivieren oder deaktivieren Sie das vom Benutzer initiierte Blättern. Dazu gehören Berührungseingaben (Bildlauf- und Wischgesten) und Eingaben über die Tastatur. Die Deaktivierung der Tastatureingabe wird noch nicht unterstützt. Wenn der benutzerinitiierte Bildlauf deaktiviert ist, funktioniert der programmatische Bildlauf über setCurrentItem weiterhin. Standardmäßig ist der benutzerinitiierte Bildlauf aktiviert.
Ich weiß, es ist sehr spät, um dies zu posten, aber hier ist ein kleiner Hack, um Ihr Ziel zu erreichen ;)
Fügen Sie einfach eine Dummy-Ansicht hinzu unter Ihren Viewpager:
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
<RelativeLayout
android:id="@+id/dummyView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
Dann fügen Sie eine OnClickListener
zu Ihrem RelativeLayout
.
dummyView = (RelativeLayout) findViewById(R.id.dummyView);
dummyView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Just leave this empty
}
});
Werden Sie ein bisschen kreativ mit Layouts, ihrer Platzierung und ihrem Verhalten und Sie werden lernen, einen Weg zu finden, absolut alles zu tun, was Sie sich vorstellen :)
Viel Glück!
Ich habe diesen Kurs mit Erfolg genutzt. Das Überschreiben der executeKeyEvent ist erforderlich, um bei einigen Geräten das Wischen mit Pfeilen zu vermeiden oder die Barrierefreiheit zu gewährleisten:
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
public class ViewPagerNoSwipe extends ViewPager {
/**
* Is swipe enabled
*/
private boolean enabled;
public ViewPagerNoSwipe(Context context, AttributeSet attrs) {
super(context, attrs);
this.enabled = false; // By default swiping is disabled
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return this.enabled ? super.onTouchEvent(event) : false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return this.enabled ? super.onInterceptTouchEvent(event) : false;
}
@Override
public boolean executeKeyEvent(KeyEvent event) {
return this.enabled ? super.executeKeyEvent(event) : false;
}
public void setSwipeEnabled(boolean enabled) {
this.enabled = enabled;
}
}
Und in der xml nennen wir es so:
<package.path.ViewPagerNoSwipe
android:layout_width="match_parent"
android:layout_height="match_parent" />
In Kotlin können wir dies lösen, indem wir ein benutzerdefiniertes Widget erstellen, das von der ViewPager-Klasse erbt und einen Flag-Wert zur Steuerung des Swipe-Verhaltens hinzufügt.
NoSwipePager.kt
class NoSwipePager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) {
var pagingEnabled: Boolean = false
override fun onTouchEvent(event: MotionEvent): Boolean {
return if (this.pagingEnabled) {
super.onTouchEvent(event)
} else false
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return if (this.pagingEnabled) {
super.onInterceptTouchEvent(event)
} else false
}
}
In xml
<your.package.NoSwipePager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tab_layout" />
Wischen programmatisch deaktivieren. Wenn kotlin-android-extensions
Plugin wird angewendet in build.gradle Die Funktion "Swiping" kann durch Eingabe des folgenden Codes deaktiviert werden.
view_pager.pagingEnabled = false
Andernfalls können wir das Durchstreichen mit dem folgenden Code deaktivieren:
val viewPager : ViewPager = findViewById(R.id.view_pager)
viewPager.pagingEnabled = false