2015-09-17 98 views
2

如何在EditText的末尾添加問號(?)作爲用戶類型。每一個textchanged問號都應該保留在edittext的末尾,就像它在Quora中發生的一樣。我正在使用textwatcher來更改文本並在最後放置問號,但我沒有得到確切的邏輯。如何在編輯文本末尾添加問號(如quora中的問號)?

textWatcher = new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      questionTxt.removeTextChangedListener(textWatcher); 
      questionTxt.setText(questionTxt.getText().toString().replace("?", "")); 
      questionTxt.setSelection(questionTxt.getText().length()-1); 
      questionTxt.setText(questionTxt.getText().toString()+"?"); 
      questionTxt.addTextChangedListener(textWatcher); 
      questionTxt.addTextChangedListener(textWatcher); 

     } 

     @Override 
     public void afterTextChanged(Editable editable) { 
      questionTxt.setSelection(editable.length()); 
      if (questionTxt.getText().toString().length() <= 0) 
       questionTxt.setError("Enter question"); 
     } 
    }; 

    questionTxt.addTextChangedListener(textWatcher); 

請參考以下圖片以供參考。

enter image description here

+0

如果將您的(?)符號放在afterTextChanged()方法中會發生什麼? – QuokMoon

+0

它被添加,但下一次當我再次按下該鍵時,此(?)將保持在其較舊的位置,並且新的問號被添加。當我輸入edittext時,它會重複。 –

回答

2

,以獲得最好的方法是創建TextWatcher就像這樣:

textWatcher = new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
    } 

    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
    } 

    @Override 
    public void afterTextChanged(Editable editable) { 
     if (editable.length() == 0) { 
      return; 
     } 

     String text = editable.toString(); 
     int indexOfQuestionMark = text.lastIndexOf("?"); 
     if (indexOfQuestionMark == -1 || indexOfQuestionMark != text.length() - 1) { 
      editable.append("?"); 
     } 
    } 
}; 

questionTxt.setHint("Enter question") 
questionTxt.addTextChangedListener(textWatcher); 

很少調整您的解決方案應該很好地工作:)

我給自己定一個提示而不是在問題txt中設置錯誤。這樣用戶在沒有輸入任何內容時將看到文本「輸入問題」。

「Alghoritm」正在搜索'?'發生在非空輸入。如果它在最後 - >然後什麼都不做。如果找不到,或者在文本內部找到某處 - >則最後添加問號。

請注意,此TextWatcher實現不依賴questionTxt,因此您可以將它放在另一個文件中。

+0

gaskoin它仍然無法正常工作。在我輸入的每個字符之後顯示questionmark:| –

+0

,因爲在TextWatcher啓動「afterTextChanged」方法後,EditText在最後設置光標位置。所以你應該強制它放在最後一個字符之前(questionTxt.setSelection(editable.length() - 2))。在我的手機上它沒有發生,所以我沒有發佈一個代碼。希望有幫助 – Gaskoin

+0

感謝您的超級棒的解決方案 –

-1

此代碼可以防止每輸入一個字符都會添加一個問號,並且一旦Edittext內沒有任何內容,也會清除問號。

public void addQuestionMark(final EditText et){ 

     et.addTextChangedListener(new TextWatcher() { 

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

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

      @Override 
      public void afterTextChanged(Editable s) { 
       if (s.length() == 0) { 
        return; 
       } 

       if("?".equals(s.toString())){ 
        s.clear(); 
        return; 
       } 

       String text = s.toString(); 
       int indexOfQuestionMark = text.lastIndexOf("?"); 
       if (indexOfQuestionMark == -1 || indexOfQuestionMark != text.length() - 1) { 
        s.append("?"); 
        et.setSelection(s.length()-1); 
       } 
      } 

     }); 
    } 
相關問題