це моя реалізація (трохи довга, але корисна для мене!): За допомогою цього коду ви можете зробити EditView лише для читання або звичайного. навіть у стані лише для читання текст може бути скопійований користувачем. ви можете змінити backgroud, щоб він виглядав відмінним від звичайного 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);