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:
public class CustomTextView extends AppCompatTextView {
public CustomTextView(Context context) {
super(context);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return true;
case MotionEvent.ACTION_UP:
performClick();
return true;
}
return false;
}
// Because we call this from onTouchEvent, this code will be executed for both
// normal touch events and for when the system calls this using Accessibility
@Override
public boolean performClick() {
super.performClick();
doSomething();
return true;
}
private void doSomething() {
Toast.makeText(getContext(), "did something", Toast.LENGTH_SHORT).show();
}
}
Dann würden Sie es einfach so verwenden:
<com.example.myapp.CustomTextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"
android:text="Click me to do something"/>
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 sind performClick()
in onTouchEvent
wie ich für die benutzerdefinierten oben tat TextView
, dann würde es jedes Mal , zweimal aufgerufen , weil Button
bereits Anrufe performClick()
.
Hier sind einige Gründe, warum Sie die Warnung möglicherweise einfach zum Schweigen bringen möchten:
- Die Arbeit, die Sie mit Ihrem Touch-Ereignis ausführen, ist nur visuell. Dies hat keinen Einfluss auf die tatsächliche Funktionsweise Ihrer App.
- Sie sind kaltherzig und möchten die Welt nicht zu einem besseren Ort für Blinde machen.
- Sie sind zu faul, um den Code zu kopieren und einzufügen, den ich Ihnen in Option 1 oben gegeben habe.
Fügen Sie am Anfang der Methode die folgende Zeile ein, um die Warnung zu unterdrücken:
@SuppressLint("ClickableViewAccessibility")
Beispielsweise:
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button myButton = findViewById(R.id.my_button);
myButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
});
}
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.