Odaklandığında EditText içindeki tüm metni seç


230

İçinde bazı kukla metin içeren bir EditText var. Kullanıcı üzerine tıkladığında, kullanıcının kukla metni yazmaya başladığında silinmesini sağlamak için seçilmesini istiyorum.

Bunu nasıl başarabilirim?

Yanıtlar:


517

main.xmlDosyanızda deneyebilirsiniz :

android:selectAllOnFocus="true"

Veya Java'da şunu kullanın:

editText.setSelectAllOnFocus(true);

17
EditText xml'de UI oluşturucu tarafından eklenen bir </requestFocus> etiketi varsa, bunun işe yaramadığını öğrendim.
machtnix

@machtnix Başka bir bileşene odak ekleyin: stackoverflow.com/a/1662088/1020871
Aşk

160
editText.setSelectAllOnFocus(true);

Programlı olarak yapmak istiyorsanız bu işe yarar.


2
Ayrıca benim için .. yukarıdaki çözüm bir şekilde işe yaramadı .. programlı çalıştı
Martin Christmann

3
Yukarıdaki kabul edilen cevapla hala sorun yaşayanlar için: bunun yerine bunu deneyin. Çalıştığı onaylandı (ayrıca test edildi Fragments).
MrHadiSatrio

Bazı garip nedenlerle xml yolu düzgün çalışmadı ve bu bir işe yarıyor. SDK içindeki hata gibi görünüyor.
ar-g

Programlı duruluyor Ve eğer ( editText.requestFocus()konu editText.clearFocus()istenen eylemin görünümü durumunda oluşur sağlamak için önceden zaten odaklı
Kötü 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();
    }
});

Yardımınız için teşekkürler, ancak 12 EditText'e sahip olduğum için ve kodumu olabildiğince temiz tutmayı sevdiğim için TheCottonSilk çözümünü tercih ediyorum :) Yine de teşekkürler!
Galip

@ TheCottonSilk çözümü, tasarım zamanı widget'ları için en iyisidir ve Craftos yanıtı dyamic editTexts için en iyisidir.
Bishnu Paudel

2
@Galip OnFocusChangeListener listener = new OnFocusChangeListener... vb ... daha sonra editText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener)vb ...
Spark

25

Bir çözüm bulduğunuzu biliyorum, ancak sorduğunuz şeyi yapmanın doğru yolu, yalnızca android:hintEditText'teki niteliği kullanmaktır . Bu metin, kutu boş olduğunda ve odaklanmadığında görünür, ancak EditText kutusunu seçtikten sonra kaybolur.


4
Uygulamamda bu alanlar kaydedilebilen kişisel bilgilerle doldurulur. Bu ayrıntıları yüklediğimde 'kukla' metnin yerini alacak. Para birimi yöntemimle, kullanıcının ayrıntıları girdikten SONRA metni seçmiş olabilirim. Endişeleriniz için teşekkürler!
Galip

12

Program üzerinde odak ve seçim çağırarak yönetildi

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

11

Neden android deneyin : hint = "ipucu" kullanıcıya ipucu sağlamak .. !!

Kullanıcı düzenleme metnini tıkladığında "ipucu" otomatik olarak kaybolacaktır. onun doğru ve en iyi çözüm.


4
İyi cevap. Bununla birlikte, EditText'i ayarlardan vb. Okuduğunuz değerlerle doldurduğunuz durumlar olabilir ve bu değerleri değiştirmeyi mümkün olduğunca kolaylaştırmak isteyebilirsiniz :)
nuala

5

Sonra editText'e bir OnClick Yöntemi de ekleyebilirsiniz.

_editText.setSelectAllOnFocus(true);

ve bunda:

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

EditText öğesini tıklar tıklamaz tüm metin seçilir.


4

SelectAllOnFocus, EditText ilk kez odaklandığında çalışır, ancak kullanıcı metni her tıkladığında metni seçmek istiyorsanız, aralar editText.clearFocus()arasında arama yapmanız gerekir .

Örneğin, uygulamanızda bir EditText ve bir düğme varsa, EditText'i değiştirdikten sonra düğmesine tıklamak odağı EditText'te bırakır. Daha sonra kullanıcı, yeni bir değer girmeden önce EditText'tekini silmek için imleç tutamacını ve geri silme tuşunu kullanmalıdır. Bu yüzden editText.clearFocus()Button onClickyöntemini çağırın .


2

Yukarıdaki bir yanıtı denedim ve ifadeleri değiştirene kadar çalışmadı. Benim için işe yarayan buydu:

    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();
       }
   }

Odak EditText üzerinde olup olmadığını sormak zorunda kaldı ve değilse odak ilk talep ve sonra temizleyin. Aksi takdirde EditText'i bir sonraki tıklatımda sanal klavye asla görünmez


1

Bunu .xml dosyasındaki editText'e eklemeniz yeterlidir

android: selectAllOnFocus = "true"


0

Bu benim için çalışıyor:

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();
            }

        }
    });
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.