Blick.OnTouchListener() funktioniert nicht im übergeordneten layout
Ich habe eine Ansicht.OnTouchListener auf eine übergeordnete layout, aber es scheint nicht zu funktionieren.
Hier ist der XML-Code für die Benutzeroberfläche:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="vertical"
android:id="@+id/mainActivityLinearLayout"
android:background="@drawable/listviewborder"
tools:context=".MainActivity" >
<View
android:id="@+id/lineView"
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="@color/gray" />
<ListView
android:id="@+id/gameListView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:dividerHeight="2dp" />
</LinearLayout>
Hier ist der OnTouchListener Satz auf das übergeordnete layout:
mainActivityView = this.findViewById(R.id.mainActivityLinearLayout);
mainActivityView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
System.out.println("Touch test activity");
return true;
}
});
onTouch()
wird nie aufgerufen und der string "nie drucken".
Nicht, dass ich umgesetzt haben OnItemClick für die ListView-und ich will nur in der Lage sein, zu erkennen, berührt das gesamte layout.
Ich habe auch versucht
gameListView = (ListView) findViewById(R.id.gameListView);
gameListView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
System.out.println("Touch test list");
return true;
}
});
obwohl diese hat nicht funktioniert entweder.
Warum ist das übergeordnete layout nicht immer touch-events? Wie bekomme ich es funktioniert?
- Ist es Teil des LinearLayout ausgesetzt? Wenn ein ListView-Steuerelement oben auf die Spitze und Griff ist die auf, Ihr LinearLayout nicht.
- Aus deinem code sehe ich, dass ein layout ist gefüllt mit 2 dp Grau und dann alle listview-Steuerelement, das heißt es ist kein Raum der Eltern-layout, die Sie tatsächlich berühren können. Sie können hinzufügen Polsterung an Ihre Eltern, so dass Sie capture, touch-Ereignisse
- Ich sehe, ja das listview ist auf der Oberseite des ganze layout. Frage mich nur, wenn es trotzdem so zu machen, dass LinearLayout fangen kann, die auf touch-event, auch wenn es unter ihm.
- Konnten Sie einen klaren Blick über alles, und Holen Sie sich die klicken Sie auf/Tippen Sie auf die Koordinaten, die.
- Oder machen Liste.setClickable(false), dann denke ich, dass die Sicht unter bekommen könnte
- Auch ist es möglich, die auf touch bei der listview? Ich habe versucht, und es hat nicht funktioniert.
- MazeHatter möchte ich die listview zu werden anklickbar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Durch Rückgabe von true in
onTouch()
, verbrauchen Sie die touch-event; die übergeordnete Ansicht OnTouchListener wird nicht aufgerufen werden. Die Dokumentation besagt:Können Sie stattdessen daran interessiert, dass die Eltern ViewGroup abfangen von touch-events von seinen Kindern durch
onInterceptTouchEvent()
, wie ausführlich in dieser Anleitung.Machen diese Klasse zu erkennen, die Geste-listener
Deklarieren Sie diese Variablen in Tätigkeit:
Nun in Ihrer Aktivität onCreate hierzu:
Schließlich die gesten, wenn auftretende oder nicht , bei mir funktionierte es perfekt.
Traf ich gleiche problem nur jetzt.
Ich denke, es ist, weil der touch-event-nie erreicht LinearLayout.
Was ich getan habe um dieses problem zu lösen ist zum abfangen des touch-Ereignis für eine individuelle Ansicht
wenn Sie möchten, zu fangen, touch, true zurück. wenn false zurück, touch-event wird übergeben an Kinder Ansichten.
Hoffe das hilft wer auf der Suche für Sie.
EDIT:
Sie können auch versuchen, hinzufügen von Attribut
android:clickable="true"
für Eltern-layout. Dies kann Auswirkungen auf die Klick auf untergeordnete Ansichten wenn (ich benutze es in einigen Fällen, aber nicht sicher, es funktioniert für alle)