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?

Galip
sumber

Jawaban:

517

Anda dapat mencoba di main.xmlfile Anda :

android:selectAllOnFocus="true"

Atau, di Jawa, gunakan

editText.setSelectAllOnFocus(true);
TheCottonSilk
sumber
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.

creftos
sumber
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();
    }
});
xandy
sumber
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.

Kevin Coppock
sumber
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();
}
AMD
sumber
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.

Vaibhav Vajani
sumber
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.

pengguna4596287
sumber
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.

Noumenon
sumber
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

RipperJugo
sumber
1

Cukup tambahkan ini ke editText Anda di file .xml

android: selectAllOnFocus = "true"

Julio Cesar Reis
sumber
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();
            }

        }
    });
senior_russia
sumber