Chọn tất cả văn bản bên trong EditText khi nó được lấy nét


230

Tôi có một EditText với một số văn bản giả trong đó. Khi người dùng nhấp vào nó, tôi muốn nó được chọn để khi người dùng bắt đầu nhập văn bản giả sẽ bị xóa.

Làm thế nào tôi có thể đạt được điều này?

Câu trả lời:


517

Bạn có thể thử trong main.xmltập tin của bạn :

android:selectAllOnFocus="true"

Hoặc, trong Java, sử dụng

editText.setSelectAllOnFocus(true);

17
Tôi mới biết rằng điều này không hoạt động, nếu trong EditText xml có thẻ </ requestF Focus> được chèn bởi trình tạo UI.
machtnix

@machtnix Thêm trọng tâm vào một thành phần khác: stackoverflow.com/a/1662088/1020871
Yêu

160
editText.setSelectAllOnFocus(true);

Điều này hoạt động nếu bạn muốn làm nó lập trình.


2
Ngoài ra đối với tôi .. giải pháp trên bằng cách nào đó đã không hoạt động .. chương trình đã hoạt động
Martin Christmann

3
Đối với những người vẫn gặp vấn đề với câu trả lời được chấp nhận ở trên: thay vào đó hãy thử câu trả lời này. Xác nhận là đang làm việc (cũng đã thử nghiệm Fragments).
MrHadiSatrio

Bởi một số lý do kỳ lạ, cách xml không hoạt động phù hợp và cách này làm. Có vẻ như lỗi bên trong SDK.
ar-g

Và nếu bạn đang tập trung theo chương trình ( editText.requestFocus()phát hành editText.clearFocus()trước để đảm bảo hành động mong muốn xảy ra trong trường hợp chế độ xem đã được tập trung
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();
    }
});

Cảm ơn sự giúp đỡ của bạn, nhưng tôi thích giải pháp của TheC BôngSilk vì tôi có 12 EditText và tôi muốn giữ mã của mình sạch nhất có thể :) Cảm ơn dù sao đi nữa!
Galip

Giải pháp của @ TheC BôngSilk là tốt nhất cho các vật dụng thời gian thiết kế và câu trả lời của Craftos là tốt nhất cho chỉnh sửa dyamic.
Bishnu Paudel

2
@Galip OnFocusChangeListener listener = new OnFocusChangeListener... vv ... sau đó editText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener)và cứ thế ...
SparK

25

Tôi biết bạn đã tìm thấy một giải pháp, nhưng thực sự cách thích hợp để làm những gì bạn yêu cầu là chỉ sử dụng android:hintthuộc tính trong EditText của bạn. Văn bản này hiển thị khi hộp trống và không tập trung, nhưng biến mất khi chọn hộp EditText.


4
Trong ứng dụng của tôi, các trường được điền bởi các chi tiết cá nhân có thể được lưu. Khi tôi tải những chi tiết đó, nó sẽ thay thế văn bản 'giả'. Với phương thức hiện tại của tôi, tôi cũng có thể chọn văn bản SAU khi người dùng nhập chi tiết. Cảm ơn bạn đã quan tâm!
Galip

12

Quản lý nó bằng cách gọi trọng tâm và lựa chọn trên chương trình

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

11

Tại sao bạn không thử dùng android: gợi ý = "gợi ý" để cung cấp gợi ý cho người dùng .. !!

"Gợi ý" sẽ tự động biến mất khi người dùng nhấp vào edittextbox. đó là giải pháp thích hợp và tốt nhất.


4
Câu trả lời tốt. Tuy nhiên, có thể có những tình huống bạn điền vào EditText với các giá trị bạn đọc từ cài đặt, v.v. và bạn muốn làm cho nó dễ dàng nhất có thể để thay đổi các giá trị này :)
mộng

5

Bạn cũng có thể thêm Phương thức OnClick vào editText sau

_editText.setSelectAllOnFocus(true);

và trong đó:

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

Ngay sau khi bạn nhấp vào chỉnh sửa, toàn bộ văn bản được chọn.


4

Chọn AllOnF Focus hoạt động lần đầu tiên EditText được lấy nét, nhưng nếu bạn muốn chọn văn bản mỗi khi người dùng nhấp vào nó, bạn cần phải gọi editText.clearFocus()giữa các lần.

Ví dụ: nếu ứng dụng của bạn có một nút Chỉnh sửa và một nút, nhấp vào nút sau khi thay đổi Chỉnh sửa sẽ rời khỏi tiêu điểm trong Chỉnh sửa. Sau đó, người dùng phải sử dụng tay cầm con trỏ và phím xóa lùi để xóa những gì trong EditText trước khi họ có thể nhập một giá trị mới. Vì vậy, hãy gọi phương thức editText.clearFocus()của Nút onClick.


2

Tôi đã thử một câu trả lời ở trên và không hoạt động cho đến khi tôi chuyển các báo cáo. Đây là những gì làm việc cho tôi:

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

Tôi đã phải hỏi nếu tiêu điểm là trên EditText, và nếu không yêu cầu tiêu điểm trước và sau đó xóa nó. Nếu không, lần tiếp theo tôi nhấp vào EditText, bàn phím ảo sẽ không bao giờ xuất hiện


1

Chỉ cần thêm phần này vào editText của bạn trong tệp .xml

android: select ALLOnF Focus = "true"


0

Đây là công việc cho tôi:

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

        }
    });
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.