questa è la mia implementazione (un po 'lunga, ma utile per me!): Con questo codice puoi rendere EditView di sola lettura o normale. anche in stato di sola lettura, il testo può essere copiato dall'utente. è possibile modificare lo sfondo per farlo sembrare diverso da un normale 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;
}
}
il vantaggio di questo codice è che l'EditText viene visualizzato come normale EditText ma il contenuto non è modificabile. Il valore restituito deve essere mantenuto come una variabile per poter tornare dallo stato di sola lettura allo stato normale.
per rendere un EditText di sola lettura, basta metterlo come:
TextWatcher tw = setReadOnly(editText, true, null);
e per renderlo normale usa tw dall'istruzione precedente:
setReadOnly(editText, false, tw);