Android में XML के माध्यम से EditText को संपादन योग्य नहीं कैसे बनाया जाए?


300

क्या कोई मुझे बता सकता है कि EditTextXML के माध्यम से संपादन योग्य नहीं है? मैं स्थापित android:editableकरने की कोशिश की false, लेकिन

  1. यह पदावनत है; तथा
  2. यह काम नहीं किया।

6
यदि संपादन योग्य नहीं है, तो आपको EditText की आवश्यकता क्यों होगी? एक साधारण TextView का उपयोग करने के लिए पर्याप्त नहीं होगा? और setEditable () फ़ंक्शन भी पदावनत है?
किकी

4
मेरे लिए यह सामग्री के लिए मानक कॉपी पेस्ट को सक्षम करने के लिए समझ में आता है। TextView के साथ यह संभव नहीं है (कम से कम डिफ़ॉल्ट व्यवहार नहीं)
Ixx

1
सुधार: यह एक बुरा विचार है। कुछ स्थितियों में दृश्य संपादन योग्य हो जाता है, या कॉपी पेस्ट विकल्प अब दिखाई नहीं देते हैं। अन्य दृष्टिकोण की तलाश करेंगे।
Ixx

11
मेरे मामले में, मैं अस्थायी रूप से एक EditText को निष्क्रिय करना चाहता हूं, जबकि संचालन का एक सेट प्रदर्शन करता है, और फिर ऑपरेशन समाप्त होने पर इसे फिर से लागू करता है।
जो प्लांटे सेप

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

जवाबों:


399

इस सरल कोड का उपयोग करें:

textView.setKeyListener(null);

यह काम करता हैं।

संपादित करें: KeyListenerबाद में जोड़ने के लिए , निम्नलिखित करें

1: कुंजी श्रोता को टैग करने के लिए सेट करें textView

textView.setTag(textView.getKeyListener());
textView.setKeyListener(null);

2: टैग से प्रमुख श्रोता प्राप्त करें और इसे वापस सेट करें textView

textView.setKeyListener((KeyListener) textView.getTag());

30
@AnkitAwasthi textView.setTag (textView.getKeyListener ()); इसे बाद में textView.setKeyListener ((KeyListener) textView.getTag ()) के साथ सेट करें;
थॉमस डिगन

@TomDignan आसानी से उस तरह से! मुझे एक प्रश्न पूछना है। क्या यह किसी भी तरह से KeyListener द्वारा आवश्यक डिफ़ॉल्ट मानों को बदल देता है, जैसे setFocusable()कि क्योंकि doc का कहना है कि यदि लागू किया जाता है तो डिफ़ॉल्ट कार्यान्वयन बदल सकता है।
एंडी

afaik नहीं, टैग आपके उपयोग के लिए उपलब्ध होना चाहिए
थॉमस डिगन

अरे उर सुझाव ने मेरी मदद की..धन्यवाद
user1387035

38
सवाल इसे XML के माध्यम से सेट करने के बारे में था , यह समाधान के रूप में क्यों चिह्नित है?
विटाली

398

इसे अपनी EditText xml फ़ाइल में जोड़ें:

<EditText ...
        android:clickable="false" 
        android:cursorVisible="false" 
        android:focusable="false" 
        android:focusableInTouchMode="false">
</EditText>

यह जैसा करेगा वैसा ही असर करेगा android:editable="false"। मेरे लिए काम किया, आशा है कि यह आपके लिए भी काम करेगा।


3
notes.setKeyListener (शून्य); notes.setClickable (गलत); notes.setCursorVisible (गलत); notes.setFocusable (गलत); notes.setFocusableInTouchMode (गलत);
जैक फ्रैंजन

3
यदि आप इसे XML में करना चाहते हैं ... तो इसके और TextView के बीच क्या अंतर होगा ???
क्रिस सिम

11
अंतर यह है कि इसका उपयोग किया जा सकता हैTextInputLayout
अहमादालिबालोच

2
इसे समाधान के रूप में चिह्नित किया जाना चाहिए, क्योंकि यह एक शुद्ध XML समाधान है जैसा कि प्रश्न में अनुरोध किया गया है।
zgc7009

2
यह पदावनत है (अक्टूबर 2018)
सेबेस्टियन पडुआनो

54

अपने Edittext होने दें

EditText editText;

editText.setKeyListener(null);

काम करेगा, लेकिन यह सिर्फ चाबियाँ नहीं सुन रहा है।

उपयोगकर्ता Edittext पर एक कर्सर देख सकता है।

तुम कोशिश कर सकते हो editText.setEnabled(false);

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


3
EditText TextView का एक उपवर्ग है क्योंकि यह सही है। हालाँकि, कृपया textView के बजाय एक चर के रूप में editText का उपयोग करें।
जो प्लांटे सेप

@JoePlante रचनात्मक टिप्पणी के लिए परिवर्तनशील नाम धन्यवाद।
महेंद्रन

यह एडिटटेक्स्ट
स्टीफन

ग्रेड एडिट टेक्स्ट दर्शाता है कि यह अक्षम है और उपयोगकर्ता इसे संपादित नहीं कर सकता है।
महेंद्रन

रंग के रूप में अच्छी तरह से व्यवस्थित करने से धूसर उपस्थिति को रोका जा सकेगा। XML: एंड्रॉइड आज़माएं: textColor = "@ color / Black" android: enable = "false"
रेड वाइन

32

जैसा कि अन्य उत्तरों में उल्लेख किया गया है, आप कर सकते हैं setEnabled(false) लेकिन चूंकि आप पूछ रहे हैं कि इसे एक्सएमएल के माध्यम से कैसे सेट किया जाए, यहां बताया गया है कि यह कैसे करना है।

निम्नलिखित विशेषता को अपने में जोड़ें EditText:

android:enabled="false"

4
ओपी प्रश्न का सटीक उत्तर।
एसएमआर

लेकिन इस विधि ने पदावनत कर दिया
ललित कुमार

2
@ ललितकुमार enabledपदावनत नहीं हैं। editableहै।
इन्सानिटीऑनबून

7
सक्षम करके, हम क्लिक श्रोता को भी एक्सेस कर सकते हैं। तो मेरे लिए इसका जवाब नहीं।
नावेद अहमद

यह छिपा हुआ पाठ है :(
Chego

24

XML से अक्षम करें (एक पंक्ति):

 android:focusable="false"

जावा से पुनः सक्षम करें, यदि आवश्यकता हो (एक पंक्ति भी):

editText.setFocusableInTouchMode(true);

अच्छा उत्तर। इस तरह आप editText.setText ("your text") का उपयोग करके अभी भी editText मान सेट कर सकते हैं। लेकिन उपयोगकर्ता इसे संपादित नहीं कर सकता।
प्रकाश

17

उन्होंने "संपादन योग्य" पदावनत कर दिया, लेकिन इनपुटटेप में संबंधित कार्य को प्रदान नहीं किया।

वैसे, इनपुट टाइप = "कोई नहीं" का कोई प्रभाव पड़ता है? इसका उपयोग करना या जहां तक ​​मैं देखता हूं, इससे कोई फर्क नहीं पड़ता है।

उदाहरण के लिए, डिफ़ॉल्ट editText को सिंगल लाइन कहा जाता है। लेकिन आपको सिंगल लाइन होने के लिए एक इनपुट टाइप का चयन करना होगा। और अगर आप "कोई नहीं" चुनते हैं, तो यह अभी भी बहुस्तरीय है।


1
डॉक्स के अनुसार , सभी उपकरणों पर इसका कोई फर्क नहीं पड़ता , लेकिन यह डॉक्स के अनुसार होना चाहिए : developer.android.com/reference/android/widget/…
caw

12
Google मेस का एक सुंदर उदाहरण
यार


13

जैसा कि आपने एंड्रॉइड का उल्लेख किया है: संपादन योग्य पदावनत है। Android: inputType = "कोई नहीं" इसके बजाय उपयोग किया जाना चाहिए, लेकिन यह बग के कारण काम नहीं करता है ( https://code.google.com/p/android/issues/detail?id=2854 )

लेकिन आप ध्यान देने योग्य का उपयोग करके एक ही चीज हासिल कर सकते हैं।

XML:

<EditText ...
        android:focusable="false" 
</EditText>

कोड से:

((EditText) findViewById(R.id.LoginNameEditText)).setFocusable(false);

Google के सौजन्य से, बग दो अलग-अलग परिदृश्यों में आएगा: 1.) यह ठीक हो जाएगा, लेकिन 6 साल बाद 2.) यह कभी ठीक नहीं होगा, वे सिर्फ एंड्रॉइड के नए संस्करण को विकसित करेंगे।
नियॉन वॉरगे जुएल

12

यदि आप इसे क्लिक करना चाहते हैं, लेकिन इसे संपादित नहीं करना चाहते हैं, तो कोशिश करें:

        android:focusable="false"

8

बस उपयोग करें android:enabled="false"। यह एक उपस्थिति भी EditTextदेगा जिससे यह देखने योग्य नहीं होगा।


7
<EditText
    android:id="@+id/txtDate"
    android:layout_width="140dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="2dp"
    android:clickable="false"
    android:cursorVisible="false"
    android:gravity="center" />

और निम्नलिखित का उपयोग करें:

txtDate.setKeyListener(null);

7

यदि आप इसे जावा कोड में करना चाहते हैं तो इसे निष्क्रिय करने के लिए इस लाइन का उपयोग करें:

editText.setEnabled(false);

और इसे सक्षम करने के लिए:

editText.setEnabled(true);

5

मैंने करने की कोशिश की:

textView.setInputType( InputType.TYPE_NULL );

जो काम करना चाहिए, लेकिन मेरे लिए यह नहीं था।

मैंने इस कोड के साथ समाप्त किया:

textView.setKeyListener(new NumberKeyListener() {
    public int getInputType() {
        return InputType.TYPE_NULL;
    }

    protected char[] getAcceptedChars() {
        return new char[] {};
    }
});

जो पूरी तरह से काम करता है।


4

जब मैं किसी गतिविधि को EditText पर ध्यान केंद्रित नहीं करना चाहता हूं और क्लिक करने पर कीबोर्ड नहीं दिखाता हूं, तो यह मेरे लिए काम करता है।

मुख्य लेआउट में विशेषताएँ जोड़ना

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

और फिर EditText फ़ील्ड

android:focusable="false"
android:focusableInTouchMode="false"

यहाँ एक उदाहरण है:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_home"
    android:background="@drawable/bg_landing"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="0dp"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true"
    tools:context="com.woppi.woppi.samplelapp.HomeActivity">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@null"
        android:inputType="textPersonName"
        android:ems="10"
        android:id="@+id/fromEditText"
        android:layout_weight="1"
        android:hint="@string/placeholder_choose_language"
        android:textColor="@android:color/white"
        android:textColorHint="@android:color/darker_gray"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:onClick="onSelectFromLanguage" />

</RelativeLayout>

3

@ लम्हे माडी के अलावा आप इसे भी आजमा सकते हैं

editText.setEnabled(false);
editor.setTextColor(Color.BLACK);

यह विधि कर्सर को छिपाएगी, फ़ोकस खोएगी और अधिक महत्वपूर्ण रूप से टेक्स्ट व्यू की तरह काले रंग के व्यवहार को सेट करेगी।

और वापस EditText पर वापस जाने के लिए बस EditText के सभी गुणों को प्राप्त करने के लिए ऐसा करें।

editText.setEnabled(true);

आशा है ये मदद करेगा :)


3

आप उपयोग कर सकते हैं, android:editable="false"लेकिन मैं आपको वास्तव में उपयोग करने की सलाह दूंगा setEnabled(false)क्योंकि यह उपयोगकर्ता को एक दृश्य सुराग प्रदान करता है जिसे नियंत्रण संपादित नहीं किया जा सकता है। सभी अक्षम विजेट द्वारा एक ही दृश्य क्यू का उपयोग किया जाता है और स्थिरता अच्छी है।


3
android:focusable="false"

android:clickable="false"

android:longClickable="false"

"LongClickable" विशेषता लंबे समय तक प्रेस क्रियाओं को निष्क्रिय कर देती है, जो "पेस्ट" और "सभी का चयन करें" टूलटिप के रूप में दिखाने का विकल्प देती हैं।


2

मैंने निम्नलिखित कोशिश की है:

codeEditText.setInputType(InputType.TYPE_NULL);

this.codeEditText.setOnFocusChangeListener(new OnFocusChangeListener() {

  @Override
  public void onFocusChange(View v, boolean hasFocus) {

    if (hasFocus) {

      pickCode();

    }

  }

});
this.codeEditText.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View v) {

    pickCode();

  }

});

लेकिन समस्या यह थी कि यदि संपादन पाठ फॉर्म में पहले है तो उसे फ़ोकस प्राप्त होता है और पिककोड () कोड जो एक नई गतिविधि लॉन्च करता है उसे सीधे कहा जाता है। इसलिए मैंने कोड को इस प्रकार संशोधित किया और यह बहुत अच्छी तरह से काम करने लगता है (सिवाय इसके कि मैं पाठ संपादित पर ध्यान केंद्रित नहीं कर सकता लेकिन मुझे इसकी आवश्यकता नहीं है):

itemCodeEditText.setFocusable(false);

this.itemCodeEditText.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View v) {

    pickItem();

  }

});

सादर,

टिप्पणियाँ स्वागत है,

जॉन गोशे


1
ठीक काम करने लगता है, लेकिन क्या यह TextView का उपयोग करना आसान नहीं है जो EditText (style: "@ android: style / Widget.EditText") का उपयोग करता है?
एंड्रॉयड डेवलपर

2

EditText.setFocusable(false)अगर मैं संपादित करना चाहता हूं तो मैं फिर से उपयोग और सेट करता हूं।



2

इस तरह से मेरे लिए काम किया, मैं क्लिपबोर्ड पर सेलेक और कॉपी कर सकता हूं, लेकिन मैं संशोधित या पेस्ट नहीं कर सकता।

android:enable="true"
android:textIsSelectable="true"
android:inputType="none"

1

Android: संपादन योग्य पदावनत है इसलिए इसके बजाय इनपुट टाइप का उपयोग करें ।

   <EditText
        android:id="@+id/editText_x"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="70"
        android:inputType="none"
        android:hint="@string/enter_x" />

android: inputType = "none" एंड्रॉइड से बहुत अलग है: संपादन योग्य, इसे स्वयं आज़माएं!
विटाली

यदि आप अपना EditText गैर-संपादन योग्य बनाने जा रहे हैं, तो क्या मैं EditText के बजाय TextView विजेट का उपयोग करने का सुझाव दे सकता हूं, क्योंकि EditText का उपयोग करना उस मामले में एक तरह का व्यर्थ लगता है।
एम-रज़ावी

आपका सुझाव पॉपअपविंडो के साथ एक EditText के लिए लागू नहीं होता है, समस्या को बेहतर ढंग से समझने के लिए इस छवि को देखें । इस उदाहरण में मैं एक EditText का लुक चाहता हूं, लेकिन मुझे "लॉक" करना होगा ताकि उपयोगकर्ता पॉपअपविंडो द्वारा मूल्य को बदल सके। अधिक प्रेरणा देखने के लिए इस समस्या की जाँच करें । यह 2009 के बाद से एक समस्या है।
डेन्स विटाली

1

मैंने उसी समस्या का सामना किया है, लेकिन अवलोकन के बाद मैंने पाया कि android:editable="false"केवल तभी काम कर रहा है जब इनपुटटेक्स ( android:inputType="ANY_VALUE") एडिटटेक्स्ट में नहीं दिया गया है।

EditText से inputType निकालें और संपादन योग्य = गलत, इसके ठीक काम का उपयोग करें।


0

मैं इसे एक संवाद के साथ हल करता हूं।

    AlertDialog dialog;
    EditText _editID;
    TextView _txtID;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_principal);
        _txtID = (TextView) findViewById(R.id._txtID);
        dialog = new AlertDialog.Builder(this).create();
        _editID = new EditText(this);
        _editID.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED);
        dialog.setTitle("Numero do Registro:");
        dialog.setView(_editID);
        dialog.setButton(DialogInterface.BUTTON_POSITIVE, "IR", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                _txtID.setText(_editID.getText());
                toId(Integer.parseInt((_editID.getText().toString())));
            }
        });
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "CANCELAR", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });

        _txtID.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                _txtID.setText("_editID.getText()");
                //_editID.setText("");
                dialog.show();

            }
        });

0

संक्षिप्त उत्तर: मैंने उपयोग किया android:focusable="false"और यह काम किया। क्लिक सुनना भी अब काम कर रहा है।



-10

इस कोड को आज़माएं। यह मेरे प्रोजेक्ट में काम कर रहा है, इसलिए यह आपके प्रोजेक्ट में काम करेगा।

android:editable="false"

2
मैं यह पुष्टि कर सकता हूं कि यह काम नहीं करता है और मूल्यह्रास पद्धति का उपयोग करने के लिए अधिक अनुशंसित नहीं है।
Adorjan प्रिंसेज़

1
Android: संपादन योग्य वास्तव में सबसे अच्छा समाधान है यदि आप चाहते हैं कि फ़ील्ड क्लिक करने योग्य हो, लेकिन संपादन योग्य न हो, अर्थात उस पर क्लिक करने के बाद एक डायलॉग खोलें।
यार

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