esta es mi implementación (un poco larga, ¡pero útil para mí!): Con este código puede hacer que EditView sea de solo lectura o Normal. incluso en estado de solo lectura, el usuario puede copiar el texto. puede cambiar el fondo para que se vea diferente de un EditText normal.
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;
}
}
el beneficio de este código es que EditText se muestra como EditText normal pero el contenido no se puede cambiar. El valor de retorno debe mantenerse como una variable para que uno pueda volver del estado de solo lectura a normal.
para hacer un EditText de solo lectura, simplemente póngalo como:
TextWatcher tw = setReadOnly(editText, true, null);
y para que sea normal, use tw de la declaración anterior:
setReadOnly(editText, false, tw);