2011-04-05 10 views
6

मुझे EditText बनाने की आवश्यकता है जो केवल एक वर्ण और केवल वर्ण (अक्षर/अल्फा) स्वीकार करेगी। और यदि उपयोगकर्ता अन्य चार में प्रवेश करता है, तो उसे मौजूदा एक को प्रतिस्थापित करना चाहिए (जैसे 1 इनपुट प्रतीक के साथ टेक्स्ट इनपुट की ओवरराइट विधि)।संपादन टेक्स्ट में केवल 1 वर्ण परमिट करें और उपयोगकर्ता इनपुट करते समय हमेशा ओवरराइट करें

  1. मुझे पता है कि गुणों में टेक्स्ट की अधिकतम लंबाई कैसे सेट करें। लेकिन अगर मैंने इसे से 1 पर सेट किया है, तो उपयोगकर्ता को मौजूदा हटाए जाने से पहले कोई अन्य चार डाला नहीं जा सकता है। लेकिन मैं मैन्युअल हटाने के बिना स्वचालित रूप से उस नए दर्ज स्वचालित रूप से प्रतिस्थापित करना चाहता हूं। उसको कैसे करे?

  2. मैं कैसे एक EditText में केवल अंक अनुमति देने के लिए गुण सेट करने के लिए पता है, लेकिन मैं को समझ नहीं सकता कैसे केवल वर्ण अनुमति देने के लिए। तो दूसरा सवाल यह है कि EditText में केवल वर्णों को कैसे अनुमति दें?

वर्तमान में मैं अधिकतम पाठ का आकार = 2 के साथ एक EditText उपयोग कर रहा हूँ निम्न कोड के साथ:

final EditText editLetter = (EditText)findViewById(R.id.editHouseLetter); 
editLetter.addTextChangedListener(new TextWatcher() { 

    public void afterTextChanged(Editable s) { 
     if (s!=null && s.length()>1){ 
      editLetter.setText(s.subSequence(1, s.length())); 
      editLetter.setSelection(1); 
     } 
    } 

    public void beforeTextChanged(CharSequence s, int start, int count, 
     int after) { 

    } 

    public void onTextChanged(CharSequence s, int start, int before, 
     int count) { 

    } 
}); 

बिंदु है, जब कोई उपयोगकर्ता एक दूसरे चार में प्रवेश करती है, पहले एक हटा दिया जाना चाहिए । पाठ आकार 2 को बनाने के लिए उपयोगकर्ता को पहले से ही प्रवेश करने के बाद उपयोगकर्ता को एक और चार दर्ज करने की अनुमति मिलती है।

मुझे वास्तव में समझ में नहीं आता कि यह कैसे काम करता है लेकिन यह करता है :)। और इसके अतिरिक्त मुझे कर्सर को EditText में अंतिम स्थिति में इंगित करना पड़ा क्योंकि यह हमेशा शुरू होता है जो कुछ भी दर्ज करने में असमर्थ बनाता है। नहीं मिला कि वह क्यों है।

इस समाधान का मुख्य बिंदु यह है कि इसमें 2-वर्ण आकार EditText है, लेकिन मुझे यह 1-आकार का आकार चाहिए। और यह अक्षरों (वर्ण/अल्फा) के अलावा कुछ भी दर्ज करने की अनुमति देता है और मुझे चार्ज के अलावा कुछ भी नहीं चाहिए।

public void afterTextChanged(Editable s) { 
    int iLen=s.length(); 
    if (iLen>0 && !Character.isLetter((s.charAt(iLen-1)))){ 
     s.delete(iLen-1, iLen); 
     return; 
    } 
    if (iLen>1){ 
     s.delete(0, 1); 
    } 
} 

मुझे पता चला है कि Selection.setSelection का उपयोग कर इस मामले में की आवश्यकता नहीं है:

sgarman और Character.isLetter() समारोह द्वारा प्रदान की सलाह का उपयोग करना, afterTextChanged विधि अब इस तरह से लग रहा है। अब इसमें एक फ़िल्टर है जो केवल अक्षरों के इनपुट की इजाजत देता है। यह लगभग जवाब है जो मैं चाहता हूं। केवल एक चीज बाकी है कि 1-प्रतीक आकार EditText के साथ ऐसा कैसे करें?

उत्तर

3

प्रयास करें:

s.delete(0, 1); 
Selection.setSelection(s, s.length()); 
+0

टेक्स्ट लंबाई = 2 के साथ यह बिल्कुल वही करता है। लंबाई = 1 के साथ यह बिल्कुल काम नहीं करता है। ईटी (एडिट लिटर) के लिंक का उपयोग किए बिना यह सिर्फ एक वैकल्पिक तरीका है। टिप के लिए Thanx लेकिन यह जवाब नहीं है। – Stan

+0

@Stan आपने इसे क्यों स्वीकार किया ;-) –

+0

कृपया मेरा प्रश्न पूरी तरह से पढ़ें और आपको क्यों मिलेगा। – Stan

9

आप अपने लेआउट xml फ़ाइल को यह एक पंक्ति में जोड़ सकते हैं, और android आप

android:maxLength="1" 
पक्का

आप इसे करने के लिए एक संपत्ति के रूप में जोड़ना चाहिए के लिए सामान करना होगा editText elemet, उदाहरण के लिए

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:inputType="text" 
    android:maxLength="1" > 

मैं एक ही समस्या का सामना किया और पाया यह आसान समाधान है, मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैंने इस लिंक को खोलने वाले लोगों के लिए इसे आसान बनाने के लिए अपना उत्तर देने का फैसला किया।

और मुझे इस blog के मालिक का शुक्रिया अदा करना नहीं भूलना चाहिए, जिसने मैंने जवाब उद्धृत किया है!

+5

कृपया मेरे प्रश्न को अधिक सावधानी से पढ़ें - इसकी सीमा केवल 1 char से सीमित नहीं है। आपका रास्ता बस काम नहीं करेगा। – Stan

2

मैं वही काम करना चाहता था और मैंने आपके कोड को बाद में टेक्स्ट (संपादन योग्य) में इस्तेमाल किया और इस तरह के संपादन टेक्स्ट पर एक फ़िल्टर भी सेट किया।

editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(2)}); 

यह काम किया, जैसा कि हम चाहते थे।

संबंधित मुद्दे

 संबंधित मुद्दे