이것이 제 구현입니다 (약간 길지만 유용합니다!) :이 코드를 사용하여 EditView를 읽기 전용 또는 일반으로 만들 수 있습니다. 읽기 전용 상태에서도 사용자가 텍스트를 복사 할 수 있습니다. 일반 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);