Cet avertissement apparaît parce qu'Android veut vous rappeler de penser aux personnes aveugles ou malvoyantes qui peuvent utiliser votre application. Je vous suggère de regarder cette vidéo pour un aperçu rapide de ce à quoi cela ressemble.
Les vues de l' interface utilisateur standard (comme Button
, TextView
, etc.) sont tous mis en place pour fournir aux utilisateurs des aveugles avec des commentaires appropriés grâce à des services d' accessibilité. Lorsque vous essayez de gérer vous-même les événements tactiles, vous risquez d'oublier de fournir ce retour d'information. C'est à cela que sert l'avertissement.
Option 1: créer une vue personnalisée
La gestion des événements tactiles est normalement effectuée dans une vue personnalisée. Ne rejetez pas cette option trop rapidement. Ce n'est pas vraiment si difficile. Voici un exemple complet de TextView
qui est remplacé pour gérer les événements tactiles:
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();
}
}
Ensuite, vous l'utiliseriez simplement comme ceci:
<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"/>
Voir mon autre réponse pour plus de détails sur la création d'une vue personnalisée.
Option 2: désactiver l'avertissement
D'autres fois, il vaudrait peut-être mieux faire taire l'avertissement. Par exemple, je ne suis pas sûr de ce que vous voulez faire avec un pour Button
lequel vous avez besoin d'événements tactiles. Si vous deviez faire un bouton personnalisé et appelé performClick()
à onTouchEvent
comme je l' ai fait ci - dessus pour la coutume TextView
, alors il s'appelle chaque fois que deux fois parce que les Button
appels déjà performClick()
.
Voici quelques raisons pour lesquelles vous voudrez peut-être simplement faire taire l'avertissement:
- Le travail que vous effectuez avec votre événement tactile n'est que visuel. Cela n'affecte pas le fonctionnement réel de votre application.
- Vous avez le cœur froid et ne vous souciez pas de rendre le monde meilleur pour les aveugles.
- Vous êtes trop paresseux pour copier et coller le code que je vous ai donné dans l'option 1 ci-dessus.
Ajoutez la ligne suivante au début de la méthode pour supprimer l'avertissement:
@SuppressLint("ClickableViewAccessibility")
Par exemple:
@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
a appelé setOnTouchListener mais ne remplace pas performClick Si une vue qui remplace onTouchEvent ou utilise un OnTouchListener n'implémente pas également performClick et l'appelle lorsque des clics sont détectés, la vue peut ne pas gérer correctement les actions d'accessibilité. La logique de gestion des actions de clic doit idéalement être placée dans View # performClick car certains services d'accessibilité invoquent performClick lorsqu'une action de clic doit se produire.