to jest moja implementacja (trochę długa, ale przydatna dla mnie!): Za pomocą tego kodu możesz ustawić EditView jako tylko do odczytu lub Normalny. nawet w stanie tylko do odczytu tekst może być kopiowany przez użytkownika. możesz zmienić tło, aby wyglądało inaczej niż zwykły tekst edycji.
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;
}
}
Zaletą tego kodu jest to, że EditText jest wyświetlany jako normalny EditText, ale zawartość nie jest zmienna. Wartość zwracana powinna być zachowana jako zmienna, aby umożliwić powrót ze stanu tylko do odczytu do normalnego.
aby uczynić EditText tylko do odczytu, po prostu umieść go jako:
TextWatcher tw = setReadOnly(editText, true, null);
i aby to było normalne użyj tw z poprzedniego oświadczenia:
setReadOnly(editText, false, tw);