दिलचस्प पोस्ट
संशोधित .resx फ़ाइल में सी # टाइपस्क्रिप्ट में "=>" का क्या अर्थ है? (फैट एरो) कॉलबैक फ़ंक्शन के लिए अभिभावकीय क्षेत्र में वैरिएबल पास करना विशिष्ट फ़ाइल पर विवादित विलय के लिए मैं हमेशा अपने स्थानीय संस्करण का चयन करने के लिए गिट को कैसे बताऊँ? कैसे बाह्य सीएसएस के साथ एसवीजी शैली? jquery: event.stopImmediatePropagation () बनाम वापसी झूठी क्या python urllib2 स्वचालित रूप से वेबपृष्ठ से ली गई जिज़िप डेटा को असम्परोड करता है? मैं खिड़कियों पर स्रोत टर्बल से एक आर पैकेज कैसे स्थापित करूं? सूची दृश्य के आकार की गणना करें या यह पूरी तरह विस्तार करने के लिए कैसे कहें क्या JSON कुंजियों को अनूठा होना चाहिए? एक प्रकार बेनामी है तो कैसे टेस्ट करने के लिए? क्या यह एक Matlab बग है? क्या आपके पास एक ही समस्या है? इसमें एक परिभाषा है, लेकिन कोई सम्मिलन नहीं है MVC वेब एपीआई: नहीं 'एक्सेस-कंट्रोल-अनुमति-उत्पत्ति' हेडर अनुरोधित संसाधन पर मौजूद है WPF Toolkit Datagrid की पंक्तियों पर लूप कैसे करें

Android को कैसे कॉपी करें: संपादन = "गलत" कोड में?

लेआउट में आप android:editable attribute माध्यम से संपादन-योग्य विजेट को गैर-संपादन योग्य बनाने के लिए सेट कर सकते हैं android:editable attribute

मैं इसे कोड में कैसे कर सकता हूं? शर्तों के आधार पर मुझे संपादन EditText विजेट को संपादन योग्य बनाने की आवश्यकता है।

Solutions Collecting From Web of "Android को कैसे कॉपी करें: संपादन = "गलत" कोड में?"

मुझे लगता है कि सभी परिवर्तनों को अस्वीकार करने वाला एक InputFilter एक अच्छा समाधान है:

 editText.setFilters(new InputFilter[] { new InputFilter() { public CharSequence filter(CharSequence src, int start, int end, Spanned dst, int dstart, int dend) { return src.length() < 1 ? dst.subSequence(dstart, dend) : ""; } } }); 

संपादित करें: डलज़र ने सुझाव दिया (नीचे) dst.subSequence(dstart, dend) को बदलने के लिए व्यवहार को दूर करने के लिए शब्द dst.subSequence(dstart, dend)

 editText.setFocusable(false); editText.setClickable(false); 

यह सुनिश्चित करता है कि संपादन EditText नियंत्रण को चुना और केंद्रित नहीं किया जा सकता, इसलिए इसे संपादित नहीं किया जा सकता।

मैं सिर्फ खुद की कोशिश की,

टेक्स्ट को अक्षम करने के लिए:

 .setFocusable(false); 

यह भी setFocusableInTouchMode को गलत सेट करता है!

पाठ संपादन सक्षम करने के लिए:

 setFocusableInTouchMode(true); 

यह भी सेट सेट फोकस योग्य है;

ऐसा करने का सबसे अच्छा तरीका कोड की इस एकल पंक्ति के साथ है:

 textView.setKeyListener(null); 

दस्तावेज़ इस विधि के लिए कहते हैं:

इस TextView के साथ उपयोग किए जाने वाले मुख्य श्रोता को सेट करता है यह उपयोगकर्ता इनपुट को अस्वीकार करने के लिए अशक्त हो सकता है।

 android:editable="false" android:inputType="none" 

आपके एक्सएमएल में या

 EditText mEdit = (EditText) findViewById(R.id.yourid); mEdit.setEnabled(false); 

या

 EditText mEdit = (EditText) findViewById(R.id.yourid); mEdit.setKeyListener(null); 

आप यह कोशिश कर सकते हैं:

  mEditText.setFocusable(false); mEditText.setClickable(false); mEditText.setFocusableInTouchMode(false); mEditText.setLongClickable(false); mEditText.setInputType(InputType.TYPE_NULL); 

यह पूरी तरह से संपादन टेक्स्ट को अक्षम कर देगा, यदि आप उपयोगकर्ता को पाठ संपादित विकल्प नहीं खोलना चाहते हैं तो लंबे समय तक प्रेस को अक्षम करें।

मुझे उस विशेषता के लिए एक सम्बन्धित विधि संपादित टेक्स्ट क्लास में दिखाई नहीं देता हालांकि, ऐसी अन्य ऐसी चीजें हैं जिन्हें आप android:focus/setFocusable(boolean) जैसे android:focus/setFocusable(boolean) कर सकते हैं android:focus/setFocusable(boolean) या किसी और android:focus/setFocusable(boolean) निर्माण करें जिसका android:editable="false" और setVisiblilty() और संपादन योग्य दृश्यों के बीच स्विच करने के लिए setVisiblilty() का उपयोग करें। यदि आप देखें View.GONEView.GONE उपयोगकर्ता को कभी नहीं पता होगा कि दो EditTexts हैं

यदि आपकी onTextChanged महत्वाकांक्षी है तो आप शायद onTextChanged साथ-साथ किसी onTextChanged साथ कुछ कर सकते हैं जैसे कि एक onTextChanged साथ प्रतिक्रिया करना।

[एक नया उत्तर पोस्ट करना, क्योंकि मैं जोसेफ के जवाब पर टिप्पणी नहीं कर सकता।]

इनपुट फिल्टर ठीक काम करता है, लेकिन इसमें एक सूक्ष्म बग होता है: किसी चयन पर टाइप करना, सभी टेक्स्ट को हटा देगा।

उदाहरण के लिए, कहें कि आपके पास EditText टेक्स्ट में "foo" टेक्स्ट है यदि आप इसे सभी का चयन करते हैं (जैसे, उस पर डबल-क्लिक करके) और 'a' टाइप करें, तो पाठ गायब हो जाएगा। इसका कारण यह है कि InputFilter को इस रूप में बुलाया जाएगा:

 filter("a", 0, 1, "foo", 0, 3); 

प्रस्तावित इनपुट फिल्टर इस मामले में रिक्त स्ट्रिंग src.length() < 1 क्योंकि src.length() < 1 false ), जो अनुपलब्ध पाठ को बताता है

इसका समाधान केवल फिल्टर फ़ंक्शन में dst.subSequence(dstart, dend) वापस करना है। यह विलोपन के लिए ठीक काम करेगा

क्या आपने settext (java.lang.CharSequence, android.widget.TextView.BufferType) की कोशिश की है? इसे वर्णित है:

पाठ को सेट करता है, जो यह TextView प्रदर्शित करने के लिए है (सेट-टेस्ट (चौरसांज देखें)) और यह भी सेट करता है कि क्या यह एक स्टाइलनीय / स्पैनेबल बफर में संग्रहीत है और क्या यह संपादन योग्य है

(जोर मेरा)

मैं एक वैकल्पिक समाधान का भी कहना चाहता हूं जो अच्छी तरह से काम करता है यदि आप एक EditView के नए उदाहरण बना रहे हैं आप डॉक्स द्वारा सुझाए गए विधि के अनुसार गलत प्राप्त करने के लिए getDefaultEditable () विधि को ओवरराइड कर सकते हैं। उदाहरण के लिए

 EditText view = new EditText(DiscountCalculator.this) { public boolean getDefaultEditable() { return false; } }; 

मेरा अनुमान

 Edittext.setEnabled(false); 

कोड के माध्यम से

तथा

 android:enabled="false" 

एसएम के माध्यम से भी इस पोस्ट की जांच करें।

उन्हें काम करना चाहिए और आप फिर से प्रोग्रामेटिक रूप से Edittext.setEnabled(true); सक्षम Edittext.setEnabled(true); सक्षम कर सकते हैं Edittext.setEnabled(true);

इस परिदृश्य के लिए मैंने जो एकमात्र उपाय पाया है, वह 2 लेआउट बनाना है। एक संपादन योग्य है और एक नहीं है। आपको विभिन्न शर्तों के आधार पर 2 से अधिक लेआउट बनाना पड़ सकते हैं। गतिविधि को पुनः आरंभ करने के बाद स्थितियों के आधार पर साझा की जाने वाली शर्तों या अन्य तरीकों में स्थितियों को नियंत्रित करें और संबंधित लेआउट लोड करें। यहां एक उदाहरण है:

गतिविधि के क्रिएट () में:

  configuration = new Configuration(this.getSharedPreferences(Configuration.SHARED_PREFERENCES_FILE_NAME, Context.MODE_PRIVATE)); manualSettingsMode = configuration.isManualSettingsMode(); if(manualSettingsMode){ setContentView(R.layout.editableconfigurationsettings); }else { setContentView(R.layout.configurationsettings); } 

गतिविधि को हालत और परीक्षण कार्यों के आधार पर पुनरारंभ किया जा सकता है:

 private void setManualEditing(){ configuration.set_isManualSettingsMode(true); this.recreate(); } private void setAutoEditing(){ configuration.set_isManualSettingsMode(false); this.recreate(); } 

उम्मीद है की यह मदद करेगा। वास्तव में एक बेहतर समाधान होना चाहिए, लेकिन यह वही है जो मैं कर रहा हूं। आदर्श रूप से, यह एक अलग-अलग क्षेत्रों पर करने में सक्षम होगा और गतिविधि / लेआउट को पुनः लोड करने के लिए नहीं होगा। -bobby

मुझे लगता है कि वांछित प्रभाव को प्राप्त करने का सही तरीका है:

 mEditView.setText("my text", BufferType.NORMAL); 

यदि आप संपादन योग्य और गैर-संपादन योग्य के बीच स्विच करना चाहते हैं तो आप निम्न कर सकते हैं:

 // Switch to non-editable mEditView.setText(mEditView.getText(), BufferType.NORMAL); // Switch back to editable mEditView.setText(mEditView.getText(), BufferType.EDITABLE); 

इसे इस्तेमाल करे:

  mEditText.setFilters(new InputFilter[]{new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { if (XXX) { return ""; } else { return null; } } }});