2009-05-26 22 views
10

Nếu tôi vô hiệu hóa một widget EditText sử dụngTại sao tôi có thể nhập vào EditText bị vô hiệu hóa?

editText.setEnabled(false);

tôi vẫn có thể gõ vào nó bằng cách sử dụng phương thức nhập liệu trên màn hình (ở cả giả lập và trên G1). Đây có phải là mục đích không? Làm thế nào tôi có thể giải quyết vấn đề này?

Trả lời

9

Tôi nhận thấy rằng bạn không thể kích hoạt bàn phím trên màn hình bằng cách khai thác trên một EditText tàn tật, và cũng có thể phím DEL không hoạt động, do đó, điều này trông giống như một lỗi đối với tôi. Tôi đã gửi nó dưới dạng issue 2771 trong trình theo dõi vấn đề Android.

0

Tôi nghĩ bạn có thể editText.setOnClickListener() bằng chức năng của riêng mình và gọi super.onClickListener() nếu bạn muốn chỉnh sửa văn bản.

Edit:
Tiếp theo liên kết có một số câu trả lời mà âm thanh giống như một cách đúng đắn:
Can we have uneditable text in edittext

+0

Tôi biết, tôi cung cấp một trong những câu trả lời có :) Câu hỏi này không phải là về * Làm thế nào để làm cho * nó không thể chỉnh sửa nhưng * tại sao * setEnabled (false) vẫn sẽ cho phép sửa đổi. Tôi đã tự hỏi liệu tôi có khái niệm cho phép tiện ích không đúng. –

1

Tôi cố định vấn đề này nhưng các bản vá chỉ đã bao gồm trong Honeycomb. Đó là lý do tại sao tôi đã tạo ra một dự án nhỏ mà sẽ chứa các bản sửa lỗi backported của tôi cho các phiên bản bắt đầu từ 2.1. Nó chứa bản sửa lỗi cho lỗi 2771: http://code.google.com/p/android-fixes/
Bạn có thể xem "thư viện" từ svn và đưa nó vào dự án của bạn. Sau đó, thay vì android.widget.EditText nhập khẩu edu.ubbdroid.android.widget.EditText (mà mở rộng EditText gốc) và các vấn đề cần phải hết :)

1
etComment.setEnabled(flag); 
etComment.setFocusable(flag); 
etComment.setFocusableInTouchMode(flag); 
if (flag) { 
    etComment.requestFocus(); 
} 
etComment.setFilters(new InputFilter[] { new InputFilter() { 
    @Override 
    public CharSequence filter(
     CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
      if (!flag) { 
       return source.length() < 1 ? dest.subSequence(dstart, dend) : ""; 
      } 
      return null; 
     } 
    } 
}); 

cho tất cả bạn có thể nhận được nó!

1

Có lẽ bạn có thể thay thế tự động bằng TextView và ngược lại. Nhưng có thể bạn sẽ cần phải điều chỉnh phông chữ để phù hợp với EditText.

2

Sử dụng này, nó làm việc cho tôi

setFocusableInTouchMode(boolean); 

setFocusable(boolean); 
6
edittext.setKeyListener(null); 

này sẽ giúp bạn

+1

Điều này là tốt đẹp bởi vì nó giữ bàn phím từ lên. –

Các vấn đề liên quan