Це попередження з'являється, оскільки Android хоче нагадати вам думати про сліпих або людей із вадами зору, які можуть використовувати ваш додаток. Я пропоную вам переглянути це відео для швидкого огляду того, що це таке.
Стандартні представлення інтерфейсу (наприклад Button
, TextView
тощо) створені для того, щоб забезпечити незрячим користувачам відповідний зворотний зв'язок через служби доступності. Якщо ви намагаєтеся самостійно впоратися з подіями на дотик, ви загрожуєте забути надати цей відгук. Саме це і є попередженням.
Варіант 1: Створіть спеціальний перегляд
Робота із подіями на дотик - це звичайно те, що робиться у власному режимі перегляду. Не відхиляйте цю опцію занадто швидко. Це насправді не так складно. Ось повний приклад того, TextView
що перекрито для обробки подій на дотик:
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();
}
}
Тоді ви просто використаєте це так:
<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"/>
Дивіться мою іншу відповідь для отримання більш детальної інформації про створення спеціального перегляду.
Варіант 2: Увімкнення попередження
В іншому випадку може бути краще просто замовкнути попередження. Наприклад, я не впевнений, що саме ти хочеш зробити з тим, для Button
чого потрібні сенсорні події. Якщо ви повинні були зробити для користувача кнопку і називається performClick()
в , onTouchEvent
як я зробив вище для митниці TextView
, то він буде викликатися двічі кожен раз , тому що Button
вже викликає performClick()
.
Ось кілька причин, з яких ви можете просто замовкнути попередження:
- Робота, яку ви виконуєте зі своєю сенсорною подією, є лише наочною. Це не впливає на фактичну роботу вашої програми.
- Ви холодносердечні і не піклуєтесь про те, щоб зробити світ кращим місцем для сліпих людей.
- Ви занадто ледачі копіювати та вставляти код, який я вам надав у варіанті 1 вище.
Додайте наступний рядок до початку методу, щоб придушити попередження:
@SuppressLint("ClickableViewAccessibility")
Наприклад:
@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
встановив на нього setOnTouchListener, але не переосмислить PerformClick Якщо Перегляд, який перекриває OnTouchEvent або використовує OnTouchListener, також не реалізує performClick та викликає його, коли клацання виявлено, Перегляд може не обробляти дії з доступністю. Логіка, що обробляє дії кліку, в ідеалі повинна розміщуватися у View # performClick, оскільки деякі служби доступності викликають performClick, коли має відбутися дія кліку.