Wenn ich versuche, onTouchListner()
einen Button hinzuzufügen , bekomme ich den
Auf Button wurde setOnTouchListener aufgerufen, überschreibt jedoch performClick nicht
Warnung. Weiß jemand, wie man es behebt?
btnleftclick.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
});
Error:
In der benutzerdefinierten Ansicht wurde setOnTouchListener aufgerufen, überschreibt jedoch nicht performClick. Wenn eine Ansicht, die onTouchEvent überschreibt oder einen OnTouchListener verwendet, performClick nicht ebenfalls implementiert und aufruft, wenn Klicks erkannt werden, verarbeitet die Ansicht die Eingabehilfen möglicherweise nicht ordnungsgemäß. Die Logik, die die Klickaktionen verarbeitet, sollte idealerweise in View # performClick platziert werden, da einige Eingabehilfedienste performClick aufrufen, wenn eine Klickaktion ausgeführt werden soll.
ImageView
wurde setOnTouchListener aufgerufen, überschreibt jedoch nicht performClick. Wenn eine Ansicht, die onTouchEvent überschreibt oder einen OnTouchListener verwendet, performClick nicht ebenfalls implementiert und aufruft, wenn Klicks erkannt werden, verarbeitet die Ansicht möglicherweise die Eingabehilfen nicht ordnungsgemäß. Die Logik, die die Klickaktionen verarbeitet, sollte idealerweise in View # performClick platziert werden, da einige Eingabehilfedienste performClick aufrufen, wenn eine Klickaktion ausgeführt werden soll.Antworten:
Diese Warnung wird angezeigt, weil Android Sie daran erinnern möchte, an blinde oder sehbehinderte Personen zu denken, die möglicherweise Ihre App verwenden. Ich schlage vor, Sie sehen sich dieses Video an, um einen schnellen Überblick darüber zu erhalten, wie das ist.
Die Standard - UI - Ansichten (wie
Button
,TextView
etc.) sind alle eingerichtet, um blinde Nutzer mit entsprechendem Feedback durch Zugänglichkeit Dienstleistungen. Wenn Sie versuchen, Berührungsereignisse selbst zu behandeln, besteht die Gefahr, dass Sie vergessen, dieses Feedback zu geben. Dafür ist die Warnung da.Option 1: Erstellen Sie eine benutzerdefinierte Ansicht
Die Behandlung von Berührungsereignissen erfolgt normalerweise in einer benutzerdefinierten Ansicht. Schließen Sie diese Option nicht zu schnell ab. Es ist nicht wirklich so schwierig. Hier ist ein vollständiges Beispiel für a
TextView
, das für die Behandlung von Berührungsereignissen überschrieben wird:Dann würden Sie es einfach so verwenden:
Weitere Informationen zum Erstellen einer benutzerdefinierten Ansicht finden Sie in meiner anderen Antwort .
Option 2: Stummschalten der Warnung
In anderen Fällen ist es möglicherweise besser, die Warnung einfach zum Schweigen zu bringen. Ich bin mir zum Beispiel nicht sicher, was Sie mit einem tun möchten, für
Button
das Sie Touch-Ereignisse benötigen. Wenn Sie eine benutzerdefinierte Taste und riefen machen sindperformClick()
inonTouchEvent
wie ich für die benutzerdefinierten oben tatTextView
, dann würde es jedes Mal , zweimal aufgerufen , weilButton
bereits AnrufeperformClick()
.Hier sind einige Gründe, warum Sie die Warnung möglicherweise einfach zum Schweigen bringen möchten:
Fügen Sie am Anfang der Methode die folgende Zeile ein, um die Warnung zu unterdrücken:
Beispielsweise:
quelle
MotionEvent event
Objekt in IhrerdoSomething()
Methode benötigen ? Ich muss nachsehenevent.getY()
.performClick()
. Mein erster Gedanke ist, wenn dasevent.getY()
nicht integraler Bestandteil des tatsächlichen Klickereignisses ist (dh visuelle UI-Effekte), dann verschieben Sie diese Logik zurück zuonTouchEvent()
. Andernfalls können Sie eine Klassenmitgliedsvariable erstellen, um den letzten Aktionswert zu speichernY
. Ich schlage außerdem vor, dass Sie den Quellcode für einige der Standardansichten überprüfen, um zu sehen, wie Android ihn implementiert. Ich muss sie selbst mehr studieren.onTouchEvent()
aber nichtperformClick()
. Dies kann ein Wischen oder Klicken oder ein anderes Berührungsereignis umfassen, das Sie erfassen möchten.Lösung:
Erstellen Sie eine Klasse, die Button oder die von Ihnen verwendete Ansicht erweitert, und überschreiben Sie performClick ()
Verwenden Sie jetzt diesen TouchableButton in XML und / oder Code und die Warnung wird weg sein!
quelle
android.widget.Button
ist fest codiert, sodass Sie dies nicht tun können. Und es scheint sehr beabsichtigt vom Android-Entwicklerteam zu sein.Haben Sie versucht hinzuzufügen:
oder Hinzufügen einer Suppresslint-Annotation:
?
quelle
https://developer.android.com/guide/topics/ui/accessibility/custom-views#custom-touch-events
quelle