Pilih semua teks di dalam EditText ketika mendapat fokus


230

Saya memiliki EditText dengan beberapa teks dummy di dalamnya. Ketika pengguna mengkliknya saya ingin itu dipilih sehingga ketika pengguna mulai mengetik teks dummy akan dihapus.

Bagaimana saya bisa mencapai ini?

Jawaban:


517

Anda dapat mencoba di main.xmlfile Anda :

android:selectAllOnFocus="true"

Atau, di Jawa, gunakan

editText.setSelectAllOnFocus(true);

17
Saya baru tahu bahwa ini tidak berfungsi, jika dalam EditText xml ada tag </requestFocus> yang dimasukkan oleh pembuat UI.
machtnix

@machtnix Tambah fokus ke komponen lain: stackoverflow.com/a/1662088/1020871
Love

160
editText.setSelectAllOnFocus(true);

Ini berfungsi jika Anda ingin melakukannya secara terprogram.


2
Juga bagi saya .. solusi di atas entah bagaimana tidak berhasil .. secara program berhasil
Martin Christmann

3
Bagi mereka yang masih memiliki masalah dengan jawaban yang diterima di atas: coba yang ini sebagai gantinya. Dikonfirmasi sedang bekerja (juga diuji untuk Fragments).
MrHadiSatrio

Dengan beberapa alasan aneh cara xml tidak berfungsi dengan benar dan ini berhasil. Sepertinya ada bug di dalam SDK.
ar-g

Dan jika Anda secara terpusat memfokuskan ( editText.requestFocus()masalah editText.clearFocus()sebelumnya untuk memastikan tindakan yang diinginkan terjadi dalam kasus di mana tampilan sudah fokus
Bad Loser

33
EditText dummy = ... 

// android.view.View.OnFocusChangeListener
dummy.setOnFocusChangeListener(new OnFocusChangeListener(){
    public void onFocusChange(View v, boolean hasFocus){
        if (hasFocus) && (isDummyText())
            ((EditText)v).selectAll();
    }
});

Terima kasih atas bantuan Anda, tetapi saya lebih suka solusi TheCottonSilk karena saya punya 12 EditText dan saya ingin menjaga kode saya sebersih mungkin :) Terima kasih!
Galip

Solusi @ TheCottonSilk adalah yang terbaik untuk widget waktu desain dan jawaban Craftos terbaik untuk editText dinamis.
Bishnu Paudel

2
@ Galip OnFocusChangeListener listener = new OnFocusChangeListener... dll ... dulu editText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener)dan seterusnya ...
SparK

25

Saya tahu Anda telah menemukan solusi, tetapi sebenarnya cara yang tepat untuk melakukan apa yang Anda minta adalah dengan hanya menggunakan android:hintatribut di EditText Anda. Teks ini muncul ketika kotak kosong dan tidak fokus, tetapi menghilang setelah memilih kotak EditText.


4
Di aplikasi saya, bidang-bidang tersebut diisi oleh detail pribadi yang dapat disimpan. Saat saya memuat detail itu, itu akan menggantikan teks 'dummy'. Dengan metode curren saya, saya juga dapat memilih teks SETELAH pengguna memasukkan rincian. Terima kasih atas perhatian Anda!
Galip

12

Mengelolanya dengan memanggil fokus dan seleksi pada program

{
editabletext.requestFocus();
editabletext.selectAll();
}

11

Mengapa Anda tidak mencoba android: hint = "hint" untuk memberikan petunjuk kepada pengguna .. !!

"Petunjuk" akan secara otomatis hilang ketika pengguna mengklik kotak edittext. itu solusi yang tepat dan terbaik.


4
Jawaban yang bagus. Namun mungkin ada situasi Anda mengisi EditText dengan nilai-nilai yang Anda baca dari pengaturan dll. Dan Anda ingin membuatnya semudah mungkin untuk mengubah nilai-nilai ini :)
nuala

5

Anda juga dapat menambahkan Metode OnClick ke editText setelah

_editText.setSelectAllOnFocus(true);

dan dalam hal itu:

_editText.clearFocus();
_editText.requestFocus();

Segera setelah Anda mengklik editTeks seluruh teks dipilih.


4

SelectAllOnFocus berfungsi saat pertama kali EditText mendapatkan fokus, tetapi jika Anda ingin memilih teks setiap kali pengguna mengkliknya, Anda perlu meneleponeditText.clearFocus() di antara waktu.

Misalnya, jika aplikasi Anda memiliki satu EditText dan satu tombol, mengklik tombol setelah mengubah EditText meninggalkan fokus di EditText. Kemudian pengguna harus menggunakan pegangan kursor dan tombol backspace untuk menghapus apa yang ada di EditText sebelum mereka dapat memasukkan nilai baru. Jadi panggil editText.clearFocus()metode Button onClick.


2

Saya mencoba jawaban di atas dan tidak bekerja sampai saya mengganti pernyataan. Inilah yang bekerja untuk saya:

    myEditText.setSelectAllOnFocus(true);
    myEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onClickMyEditText();
        }
    });

   private void onClickMyEditText() {
       if(myEditText.isFocused()){
        myEditText.clearFocus();
        myEditText.requestFocus();
       }else{
           myEditText.requestFocus();
           myEditText.clearFocus();
       }
   }

Saya harus bertanya apakah fokusnya ada pada EditText, dan jika tidak meminta fokus terlebih dahulu baru kemudian bersihkan. Kalau tidak, kali berikutnya saya mengklik EditText keyboard virtual tidak akan pernah muncul



0

Ini bekerja untuk saya:

myEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(myEditText.isFocused()){
                myEditText.requestFocus();
                myEditText.clearFocus();
                myEditText.setSelection(myEditText.getText().length(), 0);
            }else{
                myEditText.requestFocus();
                myEditText.clearFocus();
            }

        }
    });
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.