นี่คือการใช้งานของฉัน (ยาวไปหน่อย แต่มีประโยชน์กับฉัน!): ด้วยรหัสนี้คุณสามารถทำให้ EditView Read-only หรือ Normal แม้จะอยู่ในสถานะอ่านอย่างเดียวผู้ใช้สามารถคัดลอกข้อความได้ คุณสามารถเปลี่ยนพื้นหลังเพื่อให้ดูแตกต่างจาก EditText ปกติ
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;
}
}
ประโยชน์ของรหัสนี้คือ EditText จะแสดงเป็น EditText ปกติ แต่เนื้อหาไม่สามารถเปลี่ยนแปลงได้ ควรเก็บค่าที่ส่งคืนไว้เป็นตัวแปรเพื่อให้สามารถเปลี่ยนกลับจากสถานะอ่านอย่างเดียวเป็นปกติได้
ในการทำให้ EditText อ่านอย่างเดียวเพียงแค่ใส่เป็น:
TextWatcher tw = setReadOnly(editText, true, null);
และเพื่อให้ใช้งานได้ตามปกติ tw จากคำสั่งก่อนหน้า:
setReadOnly(editText, false, tw);