Saat saya mencoba menambahkan onTouchListner()
ke tombol, saya mendapat
Tombol telah memanggil setOnTouchListener tetapi tidak menggantikan performClick
peringatan. Apakah ada yang tahu cara memperbaikinya?
btnleftclick.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
});
Kesalahan:
Tampilan kustom telah memanggil setOnTouchListener tetapi tidak menggantikan 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.
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.Jawaban:
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:Maka Anda hanya akan menggunakannya seperti ini:
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 disebutperformClick()
dalamonTouchEvent
seperti yang kulakukan di atas untuk kustomTextView
, maka akan dipanggil dua kali setiap waktu karenaButton
sudah panggilanperformClick()
.Berikut beberapa alasan Anda mungkin ingin membungkam peringatan:
Tambahkan baris berikut ke awal metode untuk menyembunyikan peringatan:
Sebagai contoh:
sumber
MotionEvent event
objek dalamdoSomething()
metode Anda ? Saya perlu memeriksaevent.getY()
.performClick()
. Pikiran awal saya adalah jikaevent.getY()
tidak terpisahkan dengan kejadian klik yang sebenarnya (yaitu efek UI visual), kemudian pindahkan logika itu kembali keonTouchEvent()
. Jika tidak, Anda dapat membuat variabel anggota kelas untuk menyimpan nilai tindakan naik terakhirY
. Saya juga menyarankan Anda memeriksa kode sumber untuk beberapa tampilan standar jadi lihat bagaimana Android mengimplementasikannya. Saya sendiri perlu mempelajarinya lebih banyak.onTouchEvent()
tetapi tidakperformClick()
. Itu bisa termasuk gesekan atau klik atau peristiwa sentuh lainnya yang Anda coba tangkap.Larutan:
Buat kelas yang memperluas Button atau tampilan apa pun yang Anda gunakan dan timpa performClick ()
Sekarang gunakan TouchableButton ini dalam xml dan / atau kode dan peringatan akan hilang!
sumber
android.widget.Button
di-hardcode sehingga tidak memungkinkan Anda melakukan ini. Dan sepertinya sangat disengaja dari tim pengembang Android.Sudahkah Anda mencoba menambahkan:
atau menambahkan anotasi suppresslint:
?
sumber
https://developer.android.com/guide/topics/ui/accessibility/custom-views#custom-touch-events
sumber