Android EditText में, अपरकेस लिखने के लिए कैसे बाध्य करें?


144

मेरे एंड्रॉइड एप्लिकेशन में मेरे पास अलग है EditTextजहां उपयोगकर्ता जानकारी दर्ज कर सकता है। लेकिन मुझे उपयोगकर्ता को अपरकेस अक्षरों में लिखने के लिए मजबूर करने की आवश्यकता है। क्या आप ऐसा करने के लिए एक फ़ंक्शन जानते हैं?

जवाबों:


340

एंड्रॉइड के पास वास्तव में इसके लिए बिल्ट-इन InputFilter है !

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

सावधान रहें, setFilters अन्य सभी विशेषताओं को रीसेट जाएगा जो XML के माध्यम से स्थापित किए गए थे (यानी maxLines, inputType, imeOptinos...)। इसे रोकने के लिए, आप पहले से मौजूद लोगों के लिए फ़िल्टर (ओं) को जोड़ें।

InputFilter[] editFilters = <EditText>.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = <YOUR_FILTER>;  
<EditText>.setFilters(newFilters);

3
हाँ! यह सबसे अच्छा जवाब है! कोड edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});हालांकि होना चाहिए ।
आर्थर

4
ठीक है आप लोग सही थे, मैंने अपना जवाब अपडेट कर दिया। इसे सुधारने में मदद के लिए धन्यवाद !!
ErlVolton

4
Xml (उदाहरण के लिए maxLength) पर आपके द्वारा सेट किए गए फ़िल्टर को ओवरराइड करने से बचने के InputFilter.AllCaps()लिए, editText.getFiltersसरणी में जोड़ने का प्रयास करें । देखें stackoverflow.com/a/18934659/3890983
उष्णकटिबंधीय

21
या editText.filters = editText.filters + InputFilter.AllCaps()
कोटलिन में

4
बेहतर अभी तक: editText.filters += InputFilter.AllCaps()कोटलिन की अद्भुत! <३
मिल्क

123

यदि आप उपयोगकर्ता को अपने EditText में डिफ़ॉल्ट रूप से अपरकेस अक्षरों में लिखने के लिए बाध्य करना चाहते हैं , तो आपको बस जोड़ना होगा android:inputType="textCapCharacters"। (उपयोगकर्ता अभी भी मैन्युअल रूप से लोअरकेस में बदल सकता है।)


39
कुछ भी नहीं उपयोगकर्ता प्रेस 'पारी' को रोकता है और एक पत्र लिखा है नीचा।
फर्नांडो लील

फर्नांडो से सहमत हैं, जबकि यह कीबोर्ड को कैप करने के लिए डिफ़ॉल्ट करता है, इसके लिए उन्हें आवश्यकता नहीं है।
फ़रहान

उपयोगकर्ता @Fernando
Ajinkya


18

आप दो तरह से इस्तेमाल कर सकते हैं।

पहला तरीका:

android:inputType="textCapSentences"अपने EditText पर सेट करें ।

दूसरा तरीका:

जब उपयोगकर्ता नंबर दर्ज करता है तो आपको टेक्स्ट वॉचर का उपयोग करना होगा और छोटे से बड़े अक्षर में बदलना होगा।

edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
         edittext.setSelection(edittext.length()); //fix reverse texting
      }
    }
});  

2
आपका समाधान काम नहीं करता है क्योंकि यह स्ट्रिंग को रिवर्स ऑर्डर पर सेट करता है।
co2f2e

किस तरह से आपने पहले या दूसरे का इस्तेमाल किया।
हर्षिद

पहले वाला काम नहीं कर रहा है। दूसरा एक पाठ ऊपरी मामला बनाता है, लेकिन हमें प्रोग्राम को कर्सर को वाक्य के अंत में सेट करना होगा।
co2f2e

@ कालनामिथ फिर क्या समस्या है
हर्षिद

6
पहले विकल्प के लिए textCapSentences वाक्यों को बड़ा करता है, आपको textCapCharacters की आवश्यकता होती है।
घोटी

13

आप android:textAllCaps="true"EditText में अपनी xml फ़ाइल में संपत्ति जोड़ सकते हैं । यह सभी कैप्स मोड में प्रदर्शित होने के लिए सॉफ्टिनिट कीबोर्ड को लागू करेगा। आपके द्वारा दर्ज किया गया मान अपरकेस में दिखाई देगा। हालाँकि, यह सुनिश्चित नहीं करेगा कि उपयोगकर्ता केवल UpperCaseपत्रों में ही प्रवेश कर सकता है । यदि वे चाहें, तो वे अभी भी निचले मामलों के पत्रों पर वापस आ सकते हैं। यदि आप यह सुनिश्चित करना चाहते हैं कि आउटपुट Edittextसभी कैप्स में है, तो आपको क्लास के toUpperCase()तरीके का उपयोग करके इनपुट स्ट्रिंग को मैन्युअल रूप से परिवर्तित करना होगा String


@GustavoAlves, क्या आप मुझे बता सकते हैं कि जब आपने यह कोशिश की थी तब क्या हुआ था? हो सकता है कि मैं आपके मुद्दे पर गौर कर सकूं। :)
अभिषेक

हाय @ अभिषेक। संपत्ति सेट करने से कुछ भी नहीं बदला। EditText अभी भी अपरकेस और लोअरकेस वर्ण दोनों को स्वीकार करता है।
गूस कोस्टा

1
हां यदि आप अपने एडिट टेक्स्ट को केवल अपरकेस अक्षर स्वीकार करने के लिए प्रतिबंधित करना चाहते हैं तो आपके लिए, android: inputType = "textCapCharacters" सही विकल्प होगा। इसे आजमाइए और फिर मुझे बताइए। Hek
अभिषेक

1
इस कारण और सीमा से बाहर सूचकांक जब मैं हर टाइप।
Zapnologica

2
android:textAllCaps="true"केवल TextView ( stackoverflow.com/a/28803492/5268730 ) की एक संपत्ति है । android:inputType="textCapCharacters"इसके बजाय उपयोग करें ।
वुडइली

11

आपको android:inputType="textCapCharacters"Xml फ़ाइल में Edittext के साथ रखना चाहिए ।


9
AoyamaNanami ने बिल्कुल वही उत्तर लिखा। कृपया अधिक वर्तमान प्रश्नों पर ध्यान दें, यह 2013 से है। :)
बाइटॉम्पी

2
ध्यान दें कि उपयोगकर्ता निम्न वर्णों को शिफ्ट और दर्ज कर सकता है
Rafa0809

10

कीबोर्ड से निपटने के बारे में चिंता करने के बजाय, किसी भी इनपुट, लोअरकेस या अपरकेस को स्वीकार क्यों न करें और स्ट्रिंग को uvercase में बदलें?

निम्नलिखित कोड को मदद करनी चाहिए:

EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase

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


9

इससे भी बेहतर ... कोटलिन में एक लाइनर ...

// gets your previous attributes in XML, plus adds AllCaps filter    
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())

किया हुआ!


2
आप इसे संपत्ति एक्सेस सिंटैक्स का उपयोग करके लिख सकते हैं:<your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
मकोतोसन

8
बेहतर अभी तक:<your_edit_text>.filters += InputFilter.AllCaps()
Makotosan

9

में kotlin , .kt फ़ाइल किए जाने वाले परिवर्तन में:

edit_text.filters = edit_text.filters + InputFilter.AllCaps()

आईडी के साथ विजेट के सीधे उपयोग के लिए सिंथेटिक संपत्ति का उपयोग करें। और XML में, अपने संपादित पाठ के लिए कुछ और ध्वज जोड़ें जैसे:

<EditText
    android:id="@+id/edit_text_qr_code"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ...other attributes...
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
    />

यह कीबोर्ड को अपडेट करेगा जैसा कि अपर केस सक्षम है।



6
edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
      }
      editText.setSelection(editText.getText().length());
    }
});  

6

बस यह करें:

// ****** Every first letter capital in word *********
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textCapWords"
    />

//***** if all letters are capital ************

    android:inputType="textCapCharacters"

5

नीचे दिए गए कोड में से किसी एक का उपयोग करके अपने मुद्दे को हल करें।

प्रोग्राम के:

editText.filters = editText.filters + InputFilter.AllCaps()

XML:

android:inputType="textCapCharacters" with Edittext

4

मेरे लिए इसने android को जोड़कर काम किया : textAllCaps = "true" और android: inputType = "textCapracters"

<android.support.design.widget.TextInputEditText
                    android:layout_width="fill_parent"
                    android:layout_height="@dimen/edit_text_height"
                    android:textAllCaps="true"
                    android:inputType="textCapCharacters"
                    />

3

सभी पूंजी प्राप्त करने के लिए, अपने XML में निम्नलिखित का उपयोग करें:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
/>

2
क्या आपने इस समाधान की कोशिश की है? जब उपयोगकर्ता editext की सामग्री को संपादित करने के लिए शुरू होता है तो यह दुर्घटना का परिणाम होता है
surhidamatya

3

इस कोड को आज़माएं इससे आपका इनपुट ऊपरी स्थिति में आ जाएगा

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

2

स्वीकृत उत्तर के आधार पर, यह उत्तर वैसा ही करता है, लेकिन कोटलिन में। बस आसानी से मुकाबला करने के लिए: ·)

private fun EditText.autocapitalize() {
    val allCapsFilter = InputFilter.AllCaps()
    setFilters(getFilters() + allCapsFilter)
}

1
filters += InputFilter.AllCaps(): D
crgarridos

1

जब संपादित करें क्लिक करने के लिए पूंजीकृत कीबोर्ड प्राप्त करना हो तो अपने xml में इस कोड का उपयोग करें,

<EditText
    android:id="@+id/et"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:hint="Input your country"
    android:padding="10dp"
    android:inputType="textCapCharacters"
    />

1

मैं एंड्रॉइड 5.1 और एंड्रॉइड 6.0 (दोनों पर स्थापित एक ही apk) दोनों के लिए अपने ऐप का निर्माण करने के लिए विज़ुअल स्टूडियो 2015 / ज़ामरीन का उपयोग कर रहा हूं।

जब मैंने android:inputType="textCapCharacters"अपने axml में निर्दिष्ट किया, तो AllCaps कीबोर्ड एंड्रॉइड 6.0 पर अपेक्षित रूप से दिखाई दिया, लेकिन एंड्रॉइड 5.1 नहीं। मैंने android:textAllCaps="true"अपने axml में जोड़ा और अभी भी Android 5.1 पर कोई AllCaps कीबोर्ड नहीं है। मैंने एक फ़िल्टर का उपयोग करके सेट किया है EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });और जबकि नरम कीबोर्ड एंड्रॉइड 5.1 पर कम केस वर्ण दिखाता है, इनपुट फ़ील्ड अब AllCaps है।

संपादित करें: मेरे द्वारा देखे गए और ओएस-संबंधी होने का व्यवहार संबंधी अंतर वास्तव में थे क्योंकि मेरे पास परीक्षण उपकरणों पर Google कीबोर्ड के विभिन्न संस्करण थे। एक बार जब मैंने नवीनतम Google कीबोर्ड (इस लेखन के रूप में जुलाई 2016 को जारी) में उपकरणों को अपडेट किया, तो 'ऑल कैप्स' का व्यवहार OSes के अनुरूप था। अब, सभी डिवाइस कीबोर्ड पर लोअर-केस कैरेक्टर दिखाते हैं, लेकिन इनपुट ऑल कैप्स के कारण होता हैSetFilters(new IInputFilter[] { new InputFilterAllCaps() });


1
हाय टोनी, ऐसा लगता है कि आपने 2 खाते बनाए हैं; stackoverflow.com/users/6764633/tony-celia और stackoverflow.com/users/6771440/deeveedee । यदि आप उन्हें मर्ज करना चाहते हैं, तो stackoverflow.com/help/merging-accounts देखें ।
मैट

धन्यवाद, मैट। सीखने / गलतियों की शुरुआत करने के लिए इसे चाक करें। याद नहीं है कि मैंने एक और खाता बनाया था जब तक कि आपने इसे इंगित नहीं किया। सौभाग्य से, खाता मर्ज फ़ंक्शन सरल था। महान मंच!
टोनी

1

एर्ल्वोल्टन के उत्तर के बराबर ज़मारिन:

editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());

यही कारण है कि मैं प्यार करता हूँ कि कैसे C # इतना संक्षिप्त हो सकता है।
लियोनेट चेन

1

सरल कोटलिन अहसास

fun EditText.onlyUppercase() {
    inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
    filters = arrayOf(InputFilter.AllCaps())
}

मेरे लिए PS filtersहमेशा शुरू में खाली रहता है


0

प्रस्तावित समाधान का जावा 1-लाइनर हो सकता है:

editText.setFilters(Lists.asList(new InputFilter.AllCaps(), editText.getFilters())
    .toArray(new InputFilter[editText.getFilters().length + 1]));

ध्यान दें इसकी जरूरत है com.google.common.collect.Lists


-1

बस, अपने xml फ़ाइल के एडिट टेक्स्ट में नीचे कोड जोड़ें।

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

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

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

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

@MattMatt से पूरी तरह सहमत हैं। अगर हम ऐसा करते हैं तो उपयोगकर्ता छोटे केस लेटर नहीं लिख पाएंगे। उपयोगकर्ता को जो भी वह / वह चाहता है टाइप करने में सक्षम होना चाहिए और बाकी को शब्दों को ऑटो करना चाहिए
Mir Adnan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.