đây là cách triển khai của tôi (hơi dài, nhưng hữu ích với tôi!): Với mã này, bạn có thể đặt EditView ở chế độ Chỉ đọc hoặc Bình thường. ngay cả ở trạng thái chỉ đọc, người dùng có thể sao chép văn bản. bạn có thể thay đổi backgroud để làm cho nó trông khác với một EditText bình thường.
public static TextWatcher setReadOnly(final EditText edt, final boolean readOnlyState, TextWatcher remove) {
edt.setCursorVisible(!readOnlyState);
TextWatcher tw = null;
final String text = edt.getText().toString();
if (readOnlyState) {
tw = new TextWatcher();
@Override
public void afterTextChanged(Editable s) {
}
@Override
//saving the text before change
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
// and replace it with content if it is about to change
public void onTextChanged(CharSequence s, int start,int before, int count) {
edt.removeTextChangedListener(this);
edt.setText(text);
edt.addTextChangedListener(this);
}
};
edt.addTextChangedListener(tw);
return tw;
} else {
edt.removeTextChangedListener(remove);
return remove;
}
}
lợi ích của mã này là, EditText được hiển thị như EditText bình thường nhưng nội dung không thể thay đổi. Giá trị trả về nên được giữ dưới dạng một biến để có thể hoàn nguyên từ trạng thái chỉ đọc về trạng thái bình thường.
để đặt EditText ở chế độ chỉ đọc, chỉ cần đặt nó là:
TextWatcher tw = setReadOnly(editText, true, null);
và để làm cho nó bình thường, hãy sử dụng tw từ câu lệnh trước:
setReadOnly(editText, false, tw);