это моя реализация (немного длинная, но полезная для меня!): С помощью этого кода вы можете сделать 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);