EditText के लिए पहला अक्षर कैपिटलाइज़ेशन


383

मैं थोड़ा व्यक्तिगत टूडू सूची ऐप पर काम कर रहा हूं और अब तक सब कुछ काफी अच्छी तरह से काम कर रहा है। वहाँ एक छोटी quirk मैं बाहर निकालने के लिए करना चाहते हैं। जब भी मैं एक नया आइटम जोड़ने के लिए जाता हूं, मेरे पास एक डायलॉग होता है जिसमें एक EditText दृश्य होता है। जब मैं EditText दृश्य का चयन करता हूं, तो कीबोर्ड पाठ में प्रवेश करने के लिए आता है, जैसा कि यह होना चाहिए। अधिकांश अनुप्रयोगों में, डिफ़ॉल्ट ऐसा लगता है कि शिफ्ट कुंजी को पहले अक्षर के लिए रखा गया है ... हालांकि यह मेरे विचार से ऐसा नहीं करता है। इसे ठीक करने का एक सरल तरीका होना चाहिए, लेकिन मैंने संदर्भ को बार-बार खोजा है और इसे पा नहीं सकता। मैं सोच रहा हूं कि एडेप्टर द्वारा लोड किए गए संदर्भ के लिए एक xml विशेषता होना चाहिए, लेकिन मुझे पता नहीं चल सकता है कि यह क्या है।

जवाबों:


805

स्टैटिकली (यानी आपके लेआउट XML फ़ाइल में): android:inputType="textCapSentences"अपने पर सेट करें EditText

प्रोग्राम के रूप में: आप शामिल करना है InputType.TYPE_CLASS_TEXTमें InputTypeसे EditTextहै, जैसे

EditText editor = new EditText(this); 
editor.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

हर वाक्य के पहले चरित्र के पूंजीकरण का अनुरोध करने के लिए पाठ और इसकी विविधताओं के साथ जोड़ा जा सकता है।

- गूगल दस्तावेज


5
testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); या android: inputType = "textCapSentences" केवल तभी काम करेगा जब आपका डिवाइस कीबोर्ड Auto Capitalize Setting enable हो।
लक्ष्मणन

8
इस कारण से मेरी android:lines="7"7 पंक्तियों को दिखाने में सक्षम नहीं होने के कारण (यह अब 1 पंक्ति में वापस आ जाती है)
जेम्स विर्ज़बा

3
estEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); या android: inputType = "textCapSentences" केवल तभी काम करेगा जब आपका डिवाइस कीबोर्ड Auto Capitalize Setting enable हो। इसके लिए विकल्प क्या है, प्रोग्रामेटिक रूप से?
स्विफ्ट

@JamesWierzba मैं यहां बहुस्तरीय समर्थन के लिए प्रतिक्रिया के रूप में शिवांग उत्तर का उल्लेख करूंगा। Android जोड़ें: inputType = "textCapSentences | textMultiLine"
लेनिन

76

बस android:inputType="textCapWords"अपने EditText तत्व में उपयोग करें।

उदाहरण के लिए:

<EditText
    android:id="@+id/txtName"
    android:layout_width="0dp"
    android:layout_height="40dp"
    android:layout_weight="0.7"
    android:inputType="textCapWords"
    android:textColorHint="#aaa"
    android:hint="Name Surname"
    android:textSize="12sp" />

संदर्भ के लिए निम्नलिखित लिंक देखें: http://developer.android.com/reference/android/widget/TextView.html#attr_android%3ainputType


कोड तत्व में कोड को चिह्नित करने के बजाय इसे बोल्ड बनाने के लिए अच्छा अभ्यास है।
रवि भट्ट

13
यह उत्तर वास्तव में ओपी के प्रश्न की मदद नहीं करता है। यह प्रत्येक शब्द के लिए पहले वर्ण को कैपिटल करेगा , न कि इनपुट टेक्स्ट के पहले वर्ण को (जिसे एक वाक्य के रूप में माना जाता है)। जबकि यह शायद दूसरों की मदद कर सकता है, सही उत्तर स्वीकृत उत्तर है।
एंड्रयू टी।

37

XML में अपने EditText में निम्नलिखित लाइन लागू करें।

android:inputType="textCapSentences|textMultiLine"

यह मल्टी-लाइन समर्थन की भी अनुमति देगा।


2
यह एक स्वीकृत उत्तर होना चाहिए, क्योंकि यह एकमात्र समाधान है जो EditText को एकल-पंक्ति में नहीं
ढहाएगा

31
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);   

या android:inputType="textCapSentences"केवल तभी काम करेगा जब आपका डिवाइस कीबोर्ड ऑटो कैपिटलाइज़ सेटिंग सक्षम हो।


धन्यवाद, मैं अटक गया था क्योंकि मैं सिर्फ
पुलकित

20

मुझे एक ही समस्या का सामना करना पड़ा, बस मुझे जो पता चला उसे साझा करना। आपकी और दूसरों की मदद कर सकते हैं ...

अपने लेआउट पर यह कोशिश करें EditText। अपने में नीचे की रेखा को देखें ।

android:inputType="textCapWords|textCapSentences"

मुझ पर ठीक काम करता है .. आशा है कि यह भी आप पर काम करता है ...


5

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

यदि आप इसे एक्सएमएल में करना चाहते हैं तो कोड है

android:inputType="textCapWords|textCapSentences"

यदि इसे नीचे गतिविधि / खंड में करना चाहते हैं तो कोड है

momentTextView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS | InputType.TYPE_TEXT_FLAG_MULTI_LINE)

पुनश्च: यदि आप नाय अन्य संपत्ति कर रहे हैं, तो आप इसे आसानी से एक पाइप के साथ जोड़ सकते हैं "| प्रतीक, बस सुनिश्चित करें कि विशेषता गुणों के बीच xml में कोई स्थान नहीं है


5

EditText में कैपिटलाइज़ेशन के लिए आप नीचे दिए गए दो इनपुट प्रकार चुन सकते हैं:

  1. एंड्रॉयड: inputType = "textCapSentences"
  2. एंड्रॉयड: inputType = "textCapWords"

textCapSentences
यह हर वाक्य में पहले शब्द के पहले अक्षर को कैपिटल के रूप में जाने देगा।

textCapScript यह कैपिटल के रूप में हर शब्द के पहले अक्षर को जाने देगा।

यदि आप दोनों विशेषताओं का उपयोग करना चाहते हैं | दोनों विशेषताओं के साथ हस्ताक्षर करें

android:inputType="textCapSentences|textCapWords"

3

इस कोड को आज़माएं, यह सभी शब्दों के पहले वर्ण को बड़ा कर देगा।

- EditText देखने के लिए addTextChangedListener सेट करें

edt_text.addTextChangedListener (द्रष्टा);

- TextWatcher जोड़ें

TextWatcher watcher = new TextWatcher() {
    int mStart = 0;

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

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        mStart = start + count;
    }

    @Override
    public void afterTextChanged(Editable s) {
        String input = s.toString();
        String capitalizedText;
        if (input.length() < 1)
            capitalizedText = input;
        else if (input.length() > 1 && input.contains(" ")) {
            String fstr = input.substring(0, input.lastIndexOf(" ") + 1);
            if (fstr.length() == input.length()) {
                capitalizedText = fstr;
            } else {
                String sstr = input.substring(input.lastIndexOf(" ") + 1);
                sstr = sstr.substring(0, 1).toUpperCase() + sstr.substring(1);
                capitalizedText = fstr + sstr;
            }
        } else
            capitalizedText = input.substring(0, 1).toUpperCase() + input.substring(1);

        if (!capitalizedText.equals(edt_text.getText().toString())) {
            edt_text.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                }

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

                }

                @Override
                public void afterTextChanged(Editable s) {
                    edt_text.setSelection(mStart);
                    edt_text.removeTextChangedListener(this);
                }
            });
            edt_text.setText(capitalizedText);
        }
    }
};

3

कैपिटलाइज़ करने के लिए, आप एडिट टेक्स्ट से निम्नलिखित कर सकते हैं:

हर शब्द का पहला अक्षर कैपिटल बनाने के लिए :

android:inputType="textCapWords"

हर वाक्य का पहला अक्षर कैपिटल बनाने के लिए :

android:inputType="textCapSentences"

प्रत्येक अक्षर को पूंजी बनाने के लिए :

android:inputType="textCapCharacters"

लेकिन यह केवल कीबोर्ड में बदलाव करेगा और उपयोगकर्ता छोटे मामले में पत्र लिखने के लिए मोड बदल सकता है।

यदि आप वास्तव में पूंजी प्रारूप में डेटा चाहते हैं, तो इस दृष्टिकोण की बहुत सराहना नहीं की जाती है, पहले निम्न वर्ग जोड़ें:

public class CapitalizeFirstLetter {
    public static String capitaliseName(String name) {
        String collect[] = name.split(" ");
        String returnName = "";
        for (int i = 0; i < collect.length; i++) {
            collect[i] = collect[i].trim().toLowerCase();
            if (collect[i].isEmpty() == false) {
                returnName = returnName + collect[i].substring(0, 1).toUpperCase() + collect[i].substring(1) + " ";
            }
        }
        return returnName.trim();
    }
    public static String capitaliseOnlyFirstLetter(String data)
    {
        return data.substring(0,1).toUpperCase()+data.substring(1);
    }
}

और तब,

अब हर शब्द को भुनाने के लिए:

CapitalizeFirstLetter.capitaliseName(name);

केवल पहले शब्द को बड़ा करने के लिए:

CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);

2

XML में इनपुट प्रकार के साथ-साथ JAVA फ़ाइल में इस तरह सेट करें,

XML में,

एंड्रॉयड: inputType = "textMultiLine | textCapSentences"

यह बहुस्तरीय और जावा फ़ाइल में भी अनुमति देगा ,

edittext.setRawInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

सुनिश्चित करें कि आपके कीबोर्ड की ऑटो-कैपिटलाइज़ेशन सेटिंग सक्षम है


2

अपने लेआउट XML फ़ाइल में:

  • सेट android:inputType="textCapSentences"

  • EditTextपूंजी के रूप में प्रत्येक वाक्य के पहले शब्द की पहली वर्णमाला आपके पास है

  • या android:inputType="textCapWords"अपने EditText पर राजधानी के रूप में प्रत्येक शब्द का पहला वर्णमाला है


1

EditText के लिए केवल पहले अक्षर कैपिटलाइज़ेशन के लिए इस कोड का उपयोग करें

MainActivity.xml

<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:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:tag="true">
    </EditText>

</RelativeLayout>

MainActivity.java

EditText et = findViewById(R.id.et);
        et.addTextChangedListener(new TextWatcher() {
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
            {
                if (et.getText().toString().length() == 1 && et.getTag().toString().equals("true"))
                {
                    et.setTag("false");
                    et.setText(et.getText().toString().toUpperCase());
                    et.setSelection(et.getText().toString().length());
                }
                if(et.getText().toString().length() == 0)
                {
                    et.setTag("true");
                }
            }

            public void afterTextChanged(Editable editable) {

            }
        });

0

पहले यह हुआ करता था android:capitalize="words", जिसे अब हटा दिया गया है। अनुशंसित विकल्प का उपयोग करना हैandroid:inputType="textCapWords"

कृपया ध्यान दें कि यह तभी काम करेगा जब आपका डिवाइस कीबोर्ड ऑटो कैपिटलाइज़ सेटिंग सक्षम हो।

इस प्रोग्राम को करने के लिए, निम्न विधि का उपयोग करें:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);


0

मैंने स्थापित किया और मेरा समाधान: आपके पास जावा में इसे हल करने के 2 तरीके हैं:

 testEditText.setInputType(InputType.TYPE_CLASS_TEXT 
 | InputType.TYPE_TEXT_FLAG_CAP_WORDS);   

और xml:

 <EditText
android:id="@+id/mytxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
android:textSize="12sp" />


0

यदि आप शैलियों में शैली लिख रहे हैं

android निकालें: inputType गुण और नीचे की पंक्तियों को जोड़ें

<item name="android:capitalize">words</item>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.