Android में EditText को अक्षम करना


195

मेरे आवेदन में, मेरे पास एक EditText है कि उपयोगकर्ता के पास केवल रीड एक्सेस है लिखो एक्सेस नहीं है।

कोड में मैंने सेट किया android:enabled="false"

हालांकि EditText की पृष्ठभूमि अंधेरे में बदल गई, जब मैं इस पर क्लिक करता हूं तो कीबोर्ड पॉप हो जाता है और मैं टेक्स्ट को बदल सकता हूं।

मुझे EditText को अक्षम करने के लिए क्या सेट करना चाहिए?


2
दृश्य की शैली और स्क्रॉलिंग व्यवहार दोनों को संरक्षित करना संभव है। EditTextइस गुण को रखते हुए थोड़ी देर के लिए निष्क्रिय करने के लिए , बस इस पुस्तकालयUI.setReadOnly(myEditText, true) से उपयोग करें । यदि आप लाइब्रेरी के बिना इस व्यवहार को दोहराना चाहते हैं, तो इस छोटी सी विधि के लिए स्रोत कोड देखें
caw

जवाबों:


245

मेरा मानना ​​है कि सही सेट करना होगा android:editable="false"

और अगर आपको आश्चर्य होता है कि मेरा लिंक किन गुणों की ओर इशारा करता है TextView, तो आपको जवाब यह है क्योंकि EditTextविरासत में मिला है TextView:

EditText TextView पर एक पतली लिबास है जो खुद को संपादन योग्य बनाता है।

अद्यतन:
जैसा कि नीचे टिप्पणी में उल्लेख किया गया है, editableपदावनत ( एपीआई स्तर 3 के बाद से ) है। आपको इसके बजाय inputType(मान के साथ none) उपयोग करना चाहिए ।


धन्यवाद नेलुज, दुर्भाग्य से यह काम नहीं किया। अपने सुझाव को जोड़ने के बाद कीबोर्ड पॉप हो जाता है और टेक्स्ट को बदलने की क्षमता होती है।
हेसाम

18
Android: संपादन योग्य पदावनत है। android: inputType = "कोई नहीं" इसके बजाय उपयोग किया जाना चाहिए, लेकिन इसमें बग नहीं है और यह काम नहीं करता है। यह अच्छा होगा यदि हम सभी इस मुद्दे को यहाँ देखें: code.google.com/p/android/issues/detail?id=2854
विक्टर ब्रेचन

85
editText.setEnabled(false); editText.setInputType(InputType.TYPE_NULL);
असिमापोटे

28
android:editable="false" android:focusable="false"मेरे लिए बहुत अच्छा काम करता है (पदावनत के बारे में भूल जाओ, मुझे लगता है कि एंड्रॉइड: संपादन योग्य का एंड्रॉइड के साथ कोई लेना-देना नहीं है: इनपुट टाइप)
मुहम्मद बाबर

8
उन सभी के लिए, जिनके लिए android: inputType = "none" काम नहीं कर रहा है, कोशिश करें: android: inputType = "none" एंड्रॉइड के साथ: ध्यान देने योग्य = "झूठा"
सुरेंद्र कुमार

161

उपयोग EditText.setFocusable(false) संपादन
EditText.setFocusableInTouchMode(true)सक्षम करने के लिए संपादन अक्षम करने के लिए करें;


यह काम करता है, लेकिन यह एक अच्छा अभ्यास नहीं है क्योंकि दृश्य ऐसा लगता है कि यह संपादन योग्य हो सकता है लेकिन यह नहीं हो सकता। मेरे लिए ठीक काम किया क्योंकि मेरे दृश्य में एक कस्टम पृष्ठभूमि थी, इसलिए +1।
कंडे k

4
@kaneda। मैं वास्तव में इसे पसंद करता हूं। मैं नहीं चाहता कि मेरा बॉक्स निकल जाए। :)
प्रातः काल ५12

1
एंड्रॉइड 4.4 में, यह विकल्प मूल पाठ का रंग रखता है। उपयोग editText.setEnabled(false);करने से पाठ का रंग ग्रे हो जाएगा। हालाँकि, स्पिनर पाठ का रंग बदलते समय उपयोग नहीं करते हैं setEnabled, जिससे यह एक असंगत अनुभव होता है।
तबरून

क्यों नहीं setFocusable(true)? के बीच अंतर के लिए यह लिंक देखें : setFocusable()और stackoverflow.com/questions/23799064/…setFocusableInTouchMode()
kenju

यह वास्तव में मेरी जरूरतों के अनुकूल है। मैंने अंदर एक EditText के साथ एक यौगिक कस्टम दृश्य बनाया। मुझे केवल क्लिक स्वीकार करने के लिए मेरा कस्टम दृश्य बनाने में समस्या हो रही है, लेकिन संपादन योग्य नहीं है क्योंकि यह एक तिथि पिकर संवाद लॉन्च करता है। यह समाधान काम करता है क्योंकि यह onClickListeners
Neon Warge

64

आप निम्न विधि आज़मा सकते हैं:

 private void disableEditText(EditText editText) {
    editText.setFocusable(false);
    editText.setEnabled(false);
    editText.setCursorVisible(false);
    editText.setKeyListener(null);
    editText.setBackgroundColor(Color.TRANSPARENT); 
 }

सक्षम एडिट टेक्स्ट:

सक्षम संपादित करें

अक्षम संपादित करें:

अक्षम संपादित करें

यह मेरे लिए काम करता है और आशा है कि यह आपकी मदद करेगा।


1
यह एक TextView की तरह दिखता है। यह बहुत आश्चर्यजनक है। यह वही है जिसकी मुझे तलाश है।
यूनुस

4
मामले में किसी को वापस सक्षम करने के साथ एक ही समस्या है - आपको editText.setFocusableInTouchMode(true)इसके बजाय कॉल करने के लिए मिला है editText.setFocusable(true)
डार्ट देवगा

61

उपयोगकर्ता इनपुट को अक्षम करने के लिए इसका उपयोग करें

android:focusable="false"

Android: editable = "false" यह विधि एक पदावनत है।


1
यह स्वीकृत उत्तर होना चाहिए। अन्य प्रकारों में सुझाए गए अनुसार इनपुट प्रकार को 'कोई नहीं' सेट करना (हमेशा) काम नहीं करता है। 'झूठी' के लिए सक्षम सेटिंग संपादन को रोकता है, लेकिन पाठ को भी धीमा कर देता है जो वांछित हो सकता है या नहीं।
जेरी

36

अक्षम संपादन के लिए EditText, मुझे लगता है कि हम focusable या तो उपयोग कर सकते हैं enableलेकिन

  1. का उपयोग कर android:enabled=...याeditText.setEnabled(...)

    यह पाठ का रंग बदलकरEditText ग्रे भी कर देता है।
    जब क्लिक किया तो इसका कोई असर नहीं हुआ

  2. का उपयोग कर android:focusable=...या editText.setFocusable(false)-editText.setFocusableInTouchMode(true)

    जब यह क्लिक किया जाता है तो यह कुछ मिलीसेकंड के लिए निचली रेखा को उजागर करता है, इसका पाठ रंग नहीं बदलता हैEditText
    EditText

उत्पादन

यहां छवि विवरण दर्ज करें


आप जोड़ सकते हैं android:longClickable="false"के साथ android:focusable="false"जब इस दृश्य को छू अस्थायी प्रकाश डाला दूर करने के लिए। यह "चुनिंदा सभी" पॉपअप को प्रदर्शित होने से भी रोकता है।
CzarMatt

19

जैसा कि विवादास्पद है । आप EditText पर android:editable="false"InputType TYPE_NULL का उपयोग कर सकते हैं

इस तरह का उपयोग करें:

editText.setInputType(InputType.TYPE_NULL);

1
इस उत्तर को पसंद किया क्योंकि यह फ़ील्ड पर onClickListener को अक्षम नहीं करता है।
हर्ष गनात्रा

यदि इनपुट टाइप पासवर्ड है तो क्या करें? TYPE_NULL पासवर्ड को दृश्यमान बनाता है।
इलियामुरोमेट्स

17

के रूप में android:editable="false"पदावनत किया गयाxml

android:enabled="false"इसका उपयोग सरल है। अधिक कोड का उपयोग क्यों करें?

यदि आप चाहें java classतो इस प्रोग्राम का उपयोग भी कर सकते हैं

 editText.setEnabled(false);

android का उपयोग करें: enable = "true" के लिए enable
android_jain


5

कक्षा में नीचे गुण सेट करें:

editText.setFocusable(false);
editText.setEnabled(false);

यह आवश्यकतानुसार सुचारू रूप से काम करेगा।


केवल enabledपर्याप्त था
ateebahmed

5

एक EditText की कार्यक्षमता को अक्षम करने के लिए, बस उपयोग करें:

EditText.setInputType(InputType.TYPE_NULL);

यदि आप इसे किसी तरह से सक्षम करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

EditText.setInputType(InputType.TYPE_CLASS_TEXT);

यदि इनपुट टाइप पासवर्ड है तो क्या करें? TYPE_NULL पासवर्ड को दृश्यमान बनाता है।
इलियारोमेट्स 16

4

यदि तुम प्रयोग करते हो android:editable="false" , तो ग्रहण आपको यह संदेश याद दिलाएगा "android: editable is deprecated: इसके बजाय इनपुट टाइप का उपयोग करें"।

इसलिए, मैं android:focusable="false"इसके बजाय उपयोग करता हूं , इसने मेरे लिए अच्छा काम किया।


4
android:editable="false"

अब पदावनत और उपयोग किया जाता है

 YourEditText.setInputType(InputType.TYPE_NULL);

यदि इनपुट टाइप पासवर्ड है तो क्या करें? TYPE_NULL पासवर्ड को दृश्यमान बनाता है।
इलियारोमेट्स 16

@ilyamuromets यह उत्तर अधिक डेवलपर.TYPE_TEXT_VARIATION_PASSWORD
android.com/reference/android/text/InputType

मैं संपादन कीबोर्ड में इनपुट को अक्षम करना चाहता हूं, जबकि नरम कीबोर्ड खोला जाता है और उपयोगकर्ता इनपुट टेक्स्ट की कोशिश कर रहा है। InputType.TYPE_NULL isFocusable और isFocusableInTouchMode के साथ बढ़िया काम करता है। लेकिन यदि इनपुट फ़ील्ड का इनपुट टाइप टेक्स्टपास्वर्ड है तो इनपुट टाइप करें ।YPE_NULL पासवर्ड मान को दृश्यमान बनाएं। अगर मैंने InputType.TYPE_NULL सेट किया है | InputType.TYPE_TEXT_VARIATION_PASSWORD तब पासवर्ड भी दिखाई देने लगता है और उपयोगकर्ता इनपुट टेक्स्ट का उपयोग कर सकता है।
इलियामुरोमेट्स


3

अक्षम करें = FOCUS + CLICK + CURSOR

फ़ोकस, क्लिक, और कर्सर दृश्यता को अक्षम करना मेरे लिए ट्रिक का काम करता है।

यहाँ XML में कोड है

<EditText
    android:id="@+id/name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:focusable="false"
    android:cursorVisible="false"
    android:clickable="false"
    />

2

यह आपके edittext को अक्षम कर देगा

editText.setEnabled(false);

और इस का उपयोग करके

editText.setInputType(InputType.TYPE_NULL);

क्या सिर्फ आपका एडिटेक्स आपके सॉफ्टकबोर्ड को नहीं दिखाएगा , लेकिन अगर यह एक भौतिक कीबोर्ड से जुड़ा है, तो यह आपको टाइप करने देगा।


यदि इनपुट टाइप पासवर्ड है तो क्या करें? TYPE_NULL पासवर्ड को दृश्यमान बनाता है।
इलियारोमेट्स 16

2

मैं Google नव जारी सामग्री डिज़ाइन लाइब्रेरी का उपयोग करता हूं। मेरे मामले में, यह तब काम करता है जब मैं एंड्रॉइड का उपयोग करता हूं: ध्यान देने योग्य = "झूठा" और एंड्रॉइड: कर्सरविज़न = "झूठा"

<com.google.android.material.textfield.TextInputLayout
                    android:id="@+id/to_time_input_layout"
                    app:endIconMode="custom"
                    app:endIconDrawable="@drawable/ic_clock"
                    app:endIconContentDescription="ToTime"
                    app:endIconTint="@color/colorAccent"
                    style="@style/OutlinedEditTextStyle"
                    android:hint="To Time">

                    <com.google.android.material.textfield.TextInputEditText
                        android:id="@+id/to_time_edit_text"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:focusable="false"
                        android:cursorVisible="false" />

</com.google.android.material.textfield.TextInputLayout>

1

मेरे मामले में मुझे EditTextपाठ को स्क्रॉल करने की आवश्यकता थी यदि नहीं। लाइनों से अधिक है maxLinesजब इसके अक्षम हो। इस कार्यान्वयन ने मेरे लिए पूरी तरह से काम किया।

private void setIsChatEditTextEditable(boolean value)
{
    if(value)
    {
        mEdittext.setCursorVisible(true);
        mEdittext.setSelection(chat_edittext.length());
       // use new EditText(getApplicationContext()).getKeyListener()) if required below
        mEdittext.setKeyListener(new AppCompatEditText(getApplicationContext()).getKeyListener());  
    }
    else
    {
        mEdittext.setCursorVisible(false);
        mEdittext.setKeyListener(null);
    }
}

1

यह एक कोशिश करो, मेरे लिए ठीक काम करता है:

public class CustomEdittext extends EditText {

Boolean mIsTextEditor=true;
public CustomEdittext(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

@Override
public boolean onCheckIsTextEditor() {
    // TODO Auto-generated method stub
    return mIsTextEditor;
}


@Override
public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    mIsTextEditor=false;
    Boolean mOnTouchEvent=super.onTouchEvent(event);
    mIsTextEditor=true;     
    return mOnTouchEvent;
} }

नोट: आपको this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); अपनी गतिविधि में जोड़ने की आवश्यकता है या फिर पहली बार पॉपअप करनाkeyboard होगा ।


1

जैसा कि कुछ उत्तर में उल्लेख किया गया है, यदि आप एडिट टेक्स्ट को अक्षम करते हैं तो वह ग्रे हो जाता है और यदि आप फ़ोकस करने योग्य झूठे सेट करते हैं तो कर्सर प्रदर्शित हो रहा है।

यदि आप इसे केवल xml के साथ करना चाहते हैं तो इसने यह चाल चली

       <YourFloatLabel
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

            <EditText
                android:id="@+id/view_ads_search_select"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:focusable="true"
                android:clickable="true"/>  
       </YourFloatLabel>

मैं बस एडिटटेक्स्ट के ऊपर एक फ्रेम-आउट जोड़ता हूं और इसे फोकस करने योग्य और क्लिक करने योग्य सेट करता हूं ताकि एडिट टेक्स्ट को क्लिक न किया जा सके।


0

यह मेरे लिए काम करता है:

एंड्रॉयड: फ़ोकस करने योग्य = "false"


2
संपत कुमार ने 4 साल पहले जो पोस्ट किया था, उससे यह कैसे अलग है?
gobrewers14

0

स्वीकृत उत्तर पर @ एसिम्प्टोट की टिप्पणी से, उपयोग करें:

myEditText.setEnabled(false);
myEditText.setInputType(InputType.TYPE_NULL);

... और बॉब आपके चाचा।


0

आज मैं अभी भी उपयोग करता हूं editable="false", लेकिन इसके साथ भीfocusable="false"

मुझे लगता है कि जिस मामले को हमें एक एड-टेक्स्ट को अन-एडिट करने की आवश्यकता है, वह यह है कि हम इसकी एडिट टेक्स्ट स्टाइल (उस अंडरलाइन को हिंट, आदि के साथ) रखना चाहते हैं, लेकिन यह टेक्स्ट के बजाय अन्य इनपुट्स को स्वीकार करता है। उदाहरण के लिए एक ड्रॉपडाउन सूची।

ऐसे उपयोग के मामले में, हमें EditTextक्लिक करने योग्य होना चाहिए (इस प्रकार enabled="false"उपयुक्त नहीं है)। focusable="false"इस ट्रिक को सेट करना, हालाँकि, मैं अभी भी EditText पर लंबे समय तक पकड़ बना सकता हूं और क्लिपबोर्ड से इस पर अपना टेक्स्ट पेस्ट कर सकता हूं । आपके कोड पर निर्भर करता है और इसे संभालना आपके ऐप को क्रैश भी कर सकता है।

इसलिए मैंने भी इस्तेमाल किया editable="false"और अब सब कुछ बढ़िया है, सिवाय चेतावनी के।


0

आप उपयोग कर सकते हैं android:focusable="false"लेकिन कर्सर को निष्क्रिय करने की भी आवश्यकता है अन्यथा कॉपी / पेस्ट फ़ंक्शन अभी भी काम करेगा।

इसलिए, उपयोग करें

android:focusable="false"
android:cursorVisible="false"

0

कई हैं कि विकलांगों के कई स्तरों को कैसे प्राप्त किया जाए।

  • editText.setShowSoftInputOnFocus(false); तथा editText.setFocusable

EditTextकीबोर्ड दिखाने से रोकता है - कुछ पाठ में लिखना। लेकिन कर्सर अभी भी दिखाई देता है और उपयोगकर्ता कुछ पाठ में पेस्ट कर सकता है।

  • editText.setCursorVisible(false)

कर्सर छुपाता है। यकीन नहीं होता कि आप उस थियो को क्यों करना चाहेंगे। उपयोगकर्ता इनपुट पाठ और पेस्ट कर सकते हैं।

  • editText.setKeyListener(null)

मुझे यह रास्ता सबसे सुविधाजनक लगता है। उपयोगकर्ता टेक्स्ट कैसे इनपुट कर सकता है इसका कोई तरीका नहीं है, लेकिन विजेट तब भी काम करता है OnClickListenerजब आप उपयोगकर्ता को छूने पर कार्रवाई को ट्रिगर करना चाहते हैं

  • editText.setEnabled(false);

पूरी तरह से निष्क्रिय कर देता है EditText। यह शाब्दिक रूप से 'केवल पढ़ने के लिए' है, उपयोगकर्ता इसमें किसी भी पाठ को इनपुट नहीं कर सकता है और (उदाहरण के लिए) OnClickListener नहीं करता है इसके साथ काम है।

TextEdit प्रलेखन


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.