เลือกข้อความทั้งหมดภายใน EditText เมื่อได้รับโฟกัส


230

ฉันมี EditText พร้อมข้อความจำลองมาด้วย เมื่อผู้ใช้คลิกที่มันฉันต้องการที่จะได้รับการคัดเลือกเพื่อให้เมื่อผู้ใช้เริ่มพิมพ์ข้อความหุ่นได้รับการลบ

ฉันจะบรรลุสิ่งนี้ได้อย่างไร

คำตอบ:


517

คุณสามารถลองในmain.xmlไฟล์ของคุณ:

android:selectAllOnFocus="true"

หรือใน Java ให้ใช้

editText.setSelectAllOnFocus(true);

17
ฉันเพิ่งเรียนรู้ว่าสิ่งนี้ไม่ได้ผลหากใน EditText xml มีแท็ก </requestFocus> ที่แทรกโดยตัวสร้าง UI
machtnix

@machtnix เพิ่มโฟกัสไปยังองค์ประกอบอื่น: stackoverflow.com/a/1662088/1020871
รัก

160
editText.setSelectAllOnFocus(true);

วิธีนี้ใช้งานได้หากคุณต้องการทำแบบเป็นโปรแกรม


2
นอกจากนี้สำหรับฉัน .. วิธีแก้ปัญหาข้างต้นไม่ได้ผล .. โปรแกรมใช้งานได้
Martin Christmann

3
สำหรับผู้ที่ยังคงมีปัญหากับคำตอบที่ได้รับการยอมรับด้านบน: ลองอันนี้แทน ยืนยันว่าใช้งานได้ (ผ่านการทดสอบแล้วFragments)
MrHadiSatrio

ด้วยเหตุผลแปลก ๆ วิธี xml ไม่ทำงานอย่างเหมาะสมและอันนี้ทำ ดูเหมือนข้อผิดพลาดภายใน SDK
AR-กรัม

และหากคุณมุ่งเน้นทางโปรแกรม ( editText.requestFocus()ปัญหาeditText.clearFocus()ล่วงหน้าเพื่อให้แน่ใจว่าการกระทำที่ต้องการเกิดขึ้นในกรณีที่มุมมองโฟกัสอยู่แล้ว
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();
    }
});

ขอบคุณสำหรับความช่วยเหลือของคุณ แต่ฉันชอบโซลูชันของ TheCottonSilk เพราะฉันมี 12 EditText และฉันชอบที่จะทำให้โค้ดของฉันสะอาดที่สุดเท่าที่จะทำได้ :)
Galip

@ โซลูชั่นของ TheCottonSilk นั้นดีที่สุดสำหรับวิดเจ็ตเวลาการออกแบบและคำตอบของ Craftos นั้นดีที่สุดสำหรับ dyamic editTexts
Bishnu Paudel

2
@ Galip OnFocusChangeListener listener = new OnFocusChangeListener... ฯลฯ ... จากนั้นeditText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener)เป็นต้น ...
SparK

25

ฉันรู้ว่าคุณได้พบวิธีแก้ปัญหา แต่วิธีที่เหมาะสมจริงๆในการทำสิ่งที่คุณขอคือเพียงใช้android:hintแอตทริบิวต์ใน EditText ของคุณ ข้อความนี้จะปรากฏขึ้นเมื่อกล่องว่างเปล่าและไม่ได้มุ่งเน้น แต่จะหายไปเมื่อเลือกกล่อง EditText


4
ในแอพของฉันฟิลด์เหล่านั้นจะถูกเติมด้วยรายละเอียดส่วนบุคคลที่สามารถบันทึกได้ เมื่อฉันโหลดรายละเอียดเหล่านั้นมันจะแทนที่ข้อความ 'จำลอง' ด้วยวิธีการของฉันฉันสามารถเลือกข้อความหลังจากที่ผู้ใช้ป้อนรายละเอียด ขอบคุณสำหรับความกังวลของคุณ!
Galip


11

ทำไมคุณไม่ลองใช้Android: hint = "hint"เพื่อให้คำแนะนำแก่ผู้ใช้ .. !!

"คำใบ้" จะหายไปโดยอัตโนมัติเมื่อผู้ใช้คลิกที่ edittextbox มันเป็นทางออกที่เหมาะสมและดีที่สุด


4
คำตอบที่ดี. อย่างไรก็ตามอาจมีบางสถานการณ์ที่คุณใส่ EditText ด้วยค่าที่คุณอ่านจากการตั้งค่าเป็นต้นและคุณต้องการทำให้มันง่ายที่สุดในการเปลี่ยนค่าเหล่านี้ :)
nuala

5

คุณยังสามารถเพิ่มวิธี OnClick ไปที่ editText หลังจากนั้น

_editText.setSelectAllOnFocus(true);

และในที่:

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

ทันทีที่คุณคลิกแก้ไขข้อความข้อความทั้งหมดจะถูกเลือก


4

SelectAllOnFocus ทำงานเป็นครั้งแรกที่ EditText ได้รับการโฟกัส แต่ถ้าคุณต้องการเลือกข้อความทุกครั้งที่ผู้ใช้คลิกที่มันคุณจะต้องโทรหาeditText.clearFocus()ระหว่างเวลา

ตัวอย่างเช่นหากแอปของคุณมีหนึ่ง EditText และหนึ่งปุ่มการคลิกที่ปุ่มหลังจากเปลี่ยน EditText จะทำให้โฟกัสใน EditText จากนั้นผู้ใช้จะต้องใช้ที่จับเคอร์เซอร์และปุ่ม Backspace เพื่อลบสิ่งที่อยู่ใน EditText ก่อนที่พวกเขาจะสามารถป้อนค่าใหม่ ดังนั้นเรียกใช้editText.clearFocus()ในonClickวิธีการของปุ่ม


2

ฉันลองคำตอบข้างต้นแล้วไม่ทำงานจนกว่าฉันจะเปลี่ยนคำสั่ง นี่คือสิ่งที่ได้ผลสำหรับฉัน:

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

ฉันต้องถามว่าโฟกัสอยู่ที่ EditText หรือไม่และถ้าไม่ขอโฟกัสก่อนแล้วค่อยเคลียร์มัน ไม่เช่นนั้นครั้งต่อไปที่ฉันคลิกที่ EditText คีย์บอร์ดเสมือนจะไม่ปรากฏขึ้น



0

สิ่งนี้ใช้ได้กับฉัน:

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

        }
    });
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.