दिलचस्प पोस्ट
सामग्री के आधार पर एक आइफ्रेम का आकार बदलना सरल PHP फॉर्म: ईमेल के लिए अनुलग्नक (कोड गोल्फ) पायथन में इनपुट पढ़ने का सबसे तेज़ तरीका एमवीसी 4 रेजर फाइल अपलोड करें .htaccess में एक फ़ाइल तक पहुंच से इनकार कैसे करें क्यों एक शब्दकोश "का आदेश दिया" नहीं है? हैशसेट बनाम ट्रेसीट जावा Enum तरीके एंड्रॉइड स्टूडियो के साथ आप गिटहब के लिए परियोजनाओं को कैसे सिंक्रनाइज़ करते हैं? दोहरे सिम एंड्रॉइड फोन में दो सिम कार्ड की स्थिति का पता लगाएं ग्रहण हॉटकी: टैब्स के बीच कैसे स्विच करें? "Http://java.sun.com/jsp/jstl/core" के लिए टैग लाइब्रेरी डिस्क्रिप्टर नहीं मिल सकता है jQuery: एजेक्स कॉल की सफलता के बाद डेटा वापस लौटें सादे जावास्क्रिप्ट का उपयोग करके वर्णों को HTML एंटिटी में परिवर्तित करने के लिए क्या मैं थ्रेडों को छोड़ने के बाद __syncthreads () का उपयोग कर सकता हूं?

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

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

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

वेब के समाधान से एकत्रित समाधान "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; } } }});