Cảnh báo này xuất hiện vì Android muốn nhắc bạn suy nghĩ về những người khiếm thị có thể đang sử dụng ứng dụng của bạn. Tôi khuyên bạn nên xem video này để biết tổng quan nhanh về điều đó.
Tất cả các chế độ xem giao diện người dùng tiêu chuẩn (như Button
, TextView
v.v.) đều được thiết lập để cung cấp cho người dùng khiếm thị phản hồi thích hợp thông qua các dịch vụ Trợ năng. Khi bạn cố gắng tự xử lý các sự kiện chạm, bạn có nguy cơ quên cung cấp phản hồi đó. Đây là những gì cảnh báo dành cho.
Tùy chọn 1: Tạo chế độ xem tùy chỉnh
Xử lý các sự kiện chạm thông thường là việc được thực hiện trong chế độ xem tùy chỉnh. Đừng loại bỏ tùy chọn này quá nhanh. Nó không thực sự khó khăn. Dưới đây là một ví dụ đầy đủ về một TextView
cái được ghi đè để xử lý các sự kiện chạm:
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();
}
}
Sau đó, bạn sẽ chỉ sử dụng nó như thế này:
<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"/>
Xem câu trả lời khác của tôi để biết thêm chi tiết về cách tạo chế độ xem tùy chỉnh.
Tùy chọn 2: Tắt tiếng cảnh báo
Những lần khác, tốt hơn là bạn nên im lặng cảnh báo. Ví dụ: tôi không chắc bạn muốn làm gì với một Button
sự kiện liên lạc mà bạn cần. Nếu bạn đã tạo ra một nút tùy chỉnh và kêu gọi performClick()
trong onTouchEvent
như tôi đã làm ở trên cho tùy chỉnh TextView
, sau đó nó sẽ được gọi là hai lần mỗi lần vì Button
đã gọi performClick()
.
Dưới đây là một số lý do bạn có thể muốn bỏ qua cảnh báo:
- Công việc bạn đang thực hiện với sự kiện cảm ứng của mình chỉ là hình ảnh. Nó không ảnh hưởng đến hoạt động thực tế của ứng dụng của bạn.
- Bạn là người lạnh lùng và không quan tâm đến việc biến thế giới trở thành một nơi tốt đẹp hơn cho những người mù.
- Bạn quá lười để sao chép và dán mã tôi đã cung cấp cho bạn trong Tùy chọn 1 ở trên.
Thêm dòng sau vào đầu phương pháp để loại bỏ cảnh báo:
@SuppressLint("ClickableViewAccessibility")
Ví dụ:
@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
đã gọi setOnTouchListener nhưng không ghi đè performanceClick Nếu một Chế độ xem ghi đè onTouchEvent hoặc sử dụng OnTouchListener cũng không triển khai PerformClick và gọi nó khi nhấp chuột được phát hiện, Chế độ xem có thể không xử lý đúng các hành động trợ năng. Lý tưởng nhất là xử lý logic các hành động nhấp chuột trong Chế độ xem # thực hiện Nhấp chuột vì một số dịch vụ trợ năng gọi thực hiện Nhấp chuột khi một hành động nhấp chuột xảy ra.