2016-03-01 4 views
5

टाइप करते समय मैं संपादन टेक्स्ट में प्रत्येक शब्द को कैपिटलिज़ करना चाहता हूं।टाइपिंग करते समय संपादित टेक्स्ट में प्रत्येक शब्द को कैपिटल करें

मेरे एक्सएमएल: -

<com.project.edittext.AutoFitEditText 
       android:id="@+id/txt_name" 
       style="@style/scan_text_fields_white_bg" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:digits="@string/validation_accept_all_except_special_char" 
       android:fontFamily="sans-serif" 
       android:imeOptions="flagNoExtractUi|actionDone" 
       android:inputType="textNoSuggestions|textCapWords" 
       android:maxLength="50" 
       android:paddingBottom="3dp" 
       android:paddingLeft="12dp" 
       android:paddingRight="0dp" 
       android:paddingTop="0dp" 
       android:singleLine="true" 
       android:textColor="@color/orange" 
       /> 

अब मैं

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

उपयोग कर रहा हूँ लेकिन समस्या यह कुछ डिवाइस में काम नहीं कर रहा है। पूर्व एलजी टैबलेट। इसलिए मैंने इसे प्रोग्रामिक रूप से करने का फैसला किया।

तो मैं निम्नलिखित कोड का उपयोग कर रहा हूं।

public void onTextChanged(CharSequence s, int start, int before, int count) { 
       // TODO Auto-generated method stub     
       String mNameStr=s.toString(); 
       String finalStr=""; 
       if(!mNameStr.equals("")) { 
        String[] strArray = mNameStr.split("[\\s']"); 
        if (strArray.length > 0) { 
         for (int i = 0; i < strArray.length; i++) { 
          finalStr+=capitalize(strArray[i]); 
         } 
         Logger.d("finalStr==> ", finalStr); 
        } 
       } 
       mName.setText(finalStr.toString()); 
      } 



private String capitalize(final String line) { 
     return Character.toUpperCase(line.charAt(0)) + line.substring(1); 
    } 

यहां मेरा ऐप क्रैश हो रहा है। डीबगिंग के दौरान मुझे समस्या मिली। समस्या है पर आगे बढ़ना बंद नहीं हो रहा है। ताकि यह लगातार निष्पादित हो। कोई भी मेरी समस्या को हल करने में मेरी मदद करता है। मैं हर शब्द को पूंजीकृत करना चाहता हूं। कृपया कोई समाधान सुझाएं।

+1

एंड्रॉयड कर सकते हैं: inputType = "textCapWords" की –

+0

संभावित डुप्लिकेट [कैसे एक Android EditText में हर अक्षर को कैपिटल करना?] (Http: // stackoverflow .com/प्रश्न/13705776/कैसे-टू-कैपिटल-हर-अक्षर-इन-एंड-एंड्रॉइड-एडिटेक्स्ट) –

+0

यदि इसके क्रैश होने पर – Bhargav

उत्तर

1

आपके कोड को फ्रीज करने का कारण यह है कि onChangeListener जैसे ही आप setText ट्रिगर हो जाते हैं।

यदि टेक्स्ट समान है तो आपको ट्रिगर करना बंद करने का एक तरीका खोजना होगा।

इसके लिए आप पिछली मान को स्टोर करने के लिए एक अस्थायी स्ट्रिंग का उपयोग कर सकते हैं और ईवेंट ट्रिगर होने पर प्रत्येक बार तुलना कर सकते हैं। यह प्रवाह को लगातार बनाए रखेगा और लूपिंग नहीं करेगा।

String prevString = "";


afterTextChanged में

String mNameStr = s.toString(); 
String finalStr = ""; 
if (!mNameStr.equals("")) { 
String[] strArray = mNameStr.split("[\\s']"); 
if (strArray.length > 0) { 
    int i = 0; 
    for (i = 0; i < strArray.length - 1; i++) { 
    finalStr += capitalize(strArray[i]) + " "; 
    } 
    finalStr += capitalize(strArray[i]); 
    Log.d("finalStr==> ", finalStr); 
} 
} 
if (!finalStr.equals(prevString)) { 
prevString = finalStr; 
editText.setText(finalStr.toString()); 
editText.setSelection(finalStr.length()); 
} 

अपने कोड में एक अनुकूलन के लिए एक ही वाक्य भुनाने अगर पिछले प्रवेश किया पत्र एक अंतरिक्ष के बाद है। आप इसे यहां कार्यान्वित कर सकते हैं।

editText.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) { 
      String string = s.toString(); 
      Log.d("STRING", string + " " + prevString); 
      if (string.equals(prevString)) { 
       return; 
      } else if (string.length() == 0) 
       return; 
      // 1st character 
      else if (string.length() == 1) { 
       prevString = string.toUpperCase(); 
       editText.setText(string.toUpperCase()); 
       editText.setSelection(string.length()); 
      } 
      // if the last entered character is after a space 
      else if (string.length() > 0 && string.charAt(string.length() - 2) == ' ') { 
       string = string.substring(0, string.length() - 1) + Character.toUpperCase(string.charAt(string.length() - 1)); 
       prevString = string; 
       editText.setText(string); 
       editText.setSelection(string.length()); 
      } 
     } 
    }); 

हालांकि, उपर्युक्त विधि के लिए नीचे की तरफ है। यह उस मामले पर विचार नहीं करेगा जहां आप कर्सर की स्थिति बदलते हैं और टेक्स्ट दर्ज करते हैं।

पुनश्च: यदि आपको getSelectionEnd() विधि का उपयोग करें और उपरोक्त विधि बढ़ाने

+0

मुझे लगता है कि यह काम करेगा। मैं आपको जांचूंगा और आपको @ उमा कंथ को बता दूंगा .. !! –

+1

धन्यवाद उमा कंथ ..: -) यह ठीक काम कर रहा है .. !! एक बार फिर धन्यवाद..!! –

0

से this

संपादित

<EditText 
    android:id="@+id/txtName" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:inputType="textCapWords" /> 

संदर्भ अपने xml डिजाइन में ऐसा करें

तो काम नहीं कर रहा इस

android:capitalize="characters" 

एक्सएमएल में पाठ संपादित करने का प्रयास करें।

this

+0

मैंने कोशिश की। यह विशेष उपकरणों में काम नहीं कर रहा है। मैं एलजी टैबलेट का उपयोग कर रहा हूँ। यह इस टैबलेट में काम नहीं कर रहा है। –

+0

कोई भाग्य नहीं :-(। मैं अपना एक्सएमएल भी जोड़ूंगा। –

0

से संदर्भ इस प्रयास करें:

जोड़े एक्सएमएल में <EditText ../> में निम्नलिखित:

android:textAllCaps="true" 
0

एक afterTextChanged घटना नहीं है, तो आप उस विधि जब उपयोग करने के लिए प्रयास करना चाहिए आपका इनपुट अस्थायी समाप्त हो गया है।

+0

वही दुर्घटना त्रुटि हो रही है .. –

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