Peringatan ini muncul karena Android ingin mengingatkan Anda untuk memikirkan orang buta atau tunanetra yang mungkin menggunakan aplikasi Anda. Saya sarankan Anda menonton video ini untuk gambaran singkat tentang seperti apa itu.
Tampilan UI standar (seperti Button
, TextView
dll.) Semuanya disiapkan untuk memberikan masukan yang sesuai kepada pengguna tuna netra melalui layanan Aksesibilitas. Saat Anda mencoba menangani acara sentuh sendiri, Anda berisiko lupa memberikan umpan balik itu. Untuk inilah peringatan itu.
Opsi 1: Buat tampilan kustom
Menangani peristiwa sentuh biasanya merupakan sesuatu yang dilakukan dalam tampilan kustom. Jangan tutup opsi ini terlalu cepat. Tidak terlalu sulit. Berikut adalah contoh lengkap TextView
yang diganti untuk menangani peristiwa sentuh:
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();
}
}
Maka Anda hanya akan menggunakannya seperti ini:
<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"/>
Lihat jawaban saya yang lain untuk detail lebih lanjut tentang membuat tampilan kustom.
Opsi 2: Membungkam peringatan
Di lain waktu, mungkin lebih baik diam saja peringatan itu. Misalnya, saya tidak yakin apa yang ingin Anda lakukan dengan Button
acara sentuh yang Anda perlukan. Jika Anda adalah untuk membuat tombol kustom dan disebut performClick()
dalam onTouchEvent
seperti yang kulakukan di atas untuk kustom TextView
, maka akan dipanggil dua kali setiap waktu karena Button
sudah panggilan performClick()
.
Berikut beberapa alasan Anda mungkin ingin membungkam peringatan:
- Pekerjaan yang Anda lakukan dengan acara sentuh hanyalah visual. Ini tidak memengaruhi kerja aplikasi Anda yang sebenarnya.
- Anda berhati dingin dan tidak peduli tentang membuat dunia menjadi tempat yang lebih baik bagi orang buta.
- Anda terlalu malas untuk menyalin dan menempelkan kode yang saya berikan kepada Anda pada Opsi 1 di atas.
Tambahkan baris berikut ke awal metode untuk menyembunyikan peringatan:
@SuppressLint("ClickableViewAccessibility")
Sebagai contoh:
@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
telah memanggil setOnTouchListener tetapi tidak mengganti performClick Jika Tampilan yang mengganti onTouchEvent atau menggunakan OnTouchListener juga tidak mengimplementasikan performClick dan memanggilnya saat klik terdeteksi, Tampilan tersebut mungkin tidak menangani tindakan aksesibilitas dengan benar. Penanganan logika dari tindakan klik idealnya ditempatkan di View # performClick karena beberapa layanan aksesibilitas memanggil performClick saat tindakan klik harus terjadi.