Drawable Click EditText: Implementasi OnTouchListener Android

Advertisement

Fitur drawable pada EditText memungkinkan developer menambahkan ikon di sisi field input Android. Namun, implementasi drawable click EditText memerlukan pendekatan khusus menggunakan OnTouchListener. Dalam panduan ini, Anda akan mempelajari teknik praktis dengan kode siap pakai yang telah dioptimalkan untuk performa terbaik.

Implementasi drawable click EditText Android dengan OnTouchListener
Demo respons klik pada drawable EditText menunjukkan interaksi yang smooth

Memahami Konsep Drawable Click EditText

EditText pada Android mendukung penempatan drawable di empat posisi berbeda: start, top, end, dan bottom. Untuk merespons klik pada elemen ini, Anda perlu menggunakan OnTouchListener karena tidak ada metode onClick khusus. Pendekatan ini memungkinkan deteksi koordinat tap dan perbandingannya dengan area drawable secara presisi.

Sebagai developer, memahami mekanisme drawable click EditText sangat penting untuk menciptakan pengalaman pengguna yang intuitif. Teknik ini sering digunakan dalam form input, pencarian, dan kontrol numerik.

Advertisement

Implementasi Layout XML untuk Drawable

Pertama, buat layout dengan EditText yang memiliki drawable di properti drawableStart dan drawableEnd. Pastikan Anda telah menambahkan ikon yang diperlukan di folder res/drawable.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableStart="@drawable/ic_baseline_remove_circle_24"
        android:drawableEnd="@drawable/ic_baseline_add_circle_24"
        android:ems="10"
        android:gravity="center_horizontal"
        android:inputType="number"
        android:text="1"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Konfigurasi OnTouchListener di MainActivity

Berikut implementasi OnTouchListener untuk mendeteksi klik pada drawable. Gunakan konstanta posisi drawable dan hitung batas area tap dengan akurat.

Advertisement
public class MainActivity extends AppCompatActivity {

    @SuppressLint("ClickableViewAccessibility")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText myText = findViewById(R.id.editText1);
        myText.setOnTouchListener((view, motionEvent) -> {
            final int DRAWABLE_LEFT = 0;
            final int DRAWABLE_RIGHT = 2;

            if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                // Deteksi klik pada drawable end (kanan)
                if (motionEvent.getRawX() >= (myText.getRight() - myText.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
                    tambahNilai();
                    return true;
                }
                // Deteksi klik pada drawable start (kiri)
                if (motionEvent.getRawX() <= (myText.getLeft() + myText.getCompoundDrawables()[DRAWABLE_LEFT].getBounds().width())) {
                    kurangiNilai();
                    return true;
                }
            }
            return false;
        });
    }

    private void tambahNilai() {
        EditText myText = findViewById(R.id.editText1);
        int nilai = Integer.parseInt(myText.getText().toString());
        myText.setText(String.valueOf(nilai + 1));
    }

    private void kurangiNilai() {
        EditText myText = findViewById(R.id.editText1);
        int nilai = Integer.parseInt(myText.getText().toString());
        if (nilai > 0) myText.setText(String.valueOf(nilai - 1));
    }
}

Best Practices dan Optimasi

Untuk implementasi drawable click EditText yang optimal, selalu periksa keberadaan drawable sebelum memproses event. Selain itu, gunakan getRawX() untuk koordinat absolut atau getX() untuk koordinat relatif sesuai kebutuhan spesifik Anda.

Berikut tips tambahan untuk pengembangan:

Penyempurnaan Lanjutan

Dengan memahami cara kerja drawable click EditText, Anda dapat membuat interaksi yang lebih intuitif dalam aplikasi Android. Selalu uji fungsionalitas pada berbagai perangkat untuk memastikan konsistensi respons dan kompatibilitas.

Untuk referensi tambahan tentang praktik terbaik pengembangan Android, kunjungi dokumentasi resmi Android Developers.

Advertisement

Latest Articles