यह मेरा कार्यान्वयन है (थोड़ा लंबा, लेकिन मेरे लिए उपयोगी है!): इस कोड से आप EditView Read-only या 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;
}
}
इस कोड का लाभ यह है कि, EditText को सामान्य EditText के रूप में प्रदर्शित किया जाता है, लेकिन सामग्री परिवर्तनशील नहीं है। रिटर्न वैल्यू को एक वैरिएबल के रूप में रखा जाना चाहिए जो रीड-ओनली स्टेट से सामान्य में वापस आ सके।
एक EditText को केवल पढ़ने के लिए, बस इसे इस प्रकार रखें:
TextWatcher tw = setReadOnly(editText, true, null);
और पिछले बयान से इसे सामान्य उपयोग ट्विस्ट बनाने के लिए:
setReadOnly(editText, false, tw);