2017-12-18 146 views
0

我正在使用下面的函數強制每個單詞的第一個字母在Edittext中的大寫字母。EditText遊標定位問題

public String capitalizeFirstLetterWord(String s) { 
    StringBuilder cap = new StringBuilder(); 
    for (int i = 0; i < s.length(); i++) { 
     try { 
      char x = s.charAt(i); 
      if (x == ' ') { 
       cap.append(" "); 
       char y = s.charAt(i + 1); 
       cap.append(Character.toUpperCase(y)); 
       i++; 
      } else { 
       cap.append(x); 
      } 
     } catch (IndexOutOfBoundsException ignored) { 

     } 
    } 
    //finally, capitalize the first letter of the sentence 
    String sentence = cap.toString(); 
    if (sentence.length() > 0) { 
     sentence = String.valueOf(sentence.charAt(0)).toUpperCase(); //capitalize first letter 

     if (cap.toString().length() > 1) { //check if there's succeeding letters 
      sentence += cap.toString().substring(1); //append it also 
     } 
    } 
    return sentence; 
} 

和下面稱其爲afterTextChange()方法:

@Override 
    public void afterTextChanged(Editable editable) { 
     if (getActivity().getCurrentFocus() == mEdtName) { 
      if (editable.toString().length() > 0 && 
        !editable.toString().equals(mOldName)) { 
       mOldName = editable.toString(); //prevent infinite loop 
      mEdtName.setText(capitalizeFirstLetterWord(editable.toString())); 
mEdName.setSelection(mEdGymName.getText().length()); //set the cursor to the end of the editText 
      } 
     } 
    } 

但是,問題是,當我試圖抹去從Editext整個字符串中間的字符。遊標正在文本的末尾移動。 。 這是因爲在的下面一行afterTextChanged()方法。 如果我評論該行,光標移動到第一個位置。 。

什麼可能是解決方案?

回答

0

試試這個:

@Override 
public void afterTextChanged(Editable editable) { 
    if (getActivity().getCurrentFocus() == mEdtName) { 
     if (editable.toString().length() > 0 && !editable.toString().equals(mOldName)) { 

      int selection = mEditName.getSelectionEnd(); 

      mOldName = editable.toString(); //prevent infinite loop 
      mEditName.removeTextChangedListener(this); 
     mEditName.setText(capitalizeFirstLetterWord(editable.toString())); 
      mEditName.setSelection(selection); 
      mEditName.addTextChangedListener(this); 
     } 
    } 
} 
+0

你剛剛添加了mEditName.addTextChangedListener(this); ???沒有變化的輸出... :( –

+1

@JaiminModi不,看看第6行mEditName.removeTextChangedListener(this); –

+0

但是,它仍然沒有工作,我已經複製了它 –

0

我認爲你應該使用輸入過濾器來做到這一點。