Dies ist meine Implementierung (etwas lang, aber nützlich für mich!): Mit diesem Code können Sie EditView schreibgeschützt oder normal machen. Selbst im schreibgeschützten Zustand kann der Text vom Benutzer kopiert werden. Sie können den Hintergrund ändern, damit er sich von einem normalen EditText unterscheidet.
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;
}
}
Der Vorteil dieses Codes besteht darin, dass der EditText als normaler EditText angezeigt wird, der Inhalt jedoch nicht geändert werden kann. Der Rückgabewert sollte als Variable beibehalten werden, damit der schreibgeschützte Zustand wieder normal wird.
Um einen EditText schreibgeschützt zu machen, geben Sie ihn einfach wie folgt ein:
TextWatcher tw = setReadOnly(editText, true, null);
und um es normal zu machen, benutze tw aus der vorherigen Aussage:
setReadOnly(editText, false, tw);