2016-10-17 58 views
2

我正在開發一個應用程序,我希望我的edittext應該只帶名稱。我曾嘗試使用android:inputType="textCapSentences",但它似乎不起作用。我的edittext仍在使用emojis。我如何限制EditText採取emojis

那麼,有沒有什麼辦法可以限制任何特殊字符或表情符號在Android中的編輯文本輸入。 如果有人有想法,請回復。 在此先感謝。

+1

檢查http://stackoverflow.com/questions/24447928/android-edittext-how-to-avoid-user-enter-smileys and http://stackoverflow.com/questions/2361497/how-to-create-edittext-accepts-alphabets-only-in-android/9030749#9030749 – Srijith

回答

8

您可以使用的表情符號過濾器代碼如下

mEditText.setFilters(new InputFilter[]{EMOJI_FILTER}); 

public static InputFilter EMOJI_FILTER = new InputFilter() { 
    @Override 
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
     boolean keepOriginal = true; 
     StringBuilder sb = new StringBuilder(end - start); 
     for (int index = start; index < end; index++) { 
      int type = Character.getType(source.charAt(index)); 
      if (type == Character.SURROGATE || type == Character.OTHER_SYMBOL) { 
       return ""; 
      } 
      char c = source.charAt(index); 
      if (isCharAllowed(c)) 
       sb.append(c); 
      else 
       keepOriginal = false; 
     } 
     if (keepOriginal) 
      return null; 
     else { 
      if (source instanceof Spanned) { 
       SpannableString sp = new SpannableString(sb); 
       TextUtils.copySpansFrom((Spanned) source, start, sb.length(), null, sp, 0); 
       return sp; 
      } else { 
       return sb; 
      } 
     } 
    } 
}; 

private static boolean isCharAllowed(char c) { 
    return Character.isLetterOrDigit(c) || Character.isSpaceChar(c); 
} 
+1

但它會過濾點(「。」),逗號(「,」)和其他標點符號,不僅表情符號 – HendraWD

0

那麼有一個竅門,但我不確定它可能對你的情況有幫助。關鍵是要設置的inputTypetextEmailAddress

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="textEmailAddress" /> 

您也可以看看這個answer

0
KeyListener keyListener = new TextKeyListener(TextKeyListener.Capitalize.SENTENCES, false); 
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
       setInput(YOUR_EDIT_TEXT, keyListener, imm); 
0

建立一個TextWatcher上EDITTEXT,在OnTextChanged,做到以下幾點,

String s = charSequence.toString(); 
Pattern p = Pattern.compile("[^A-Za-z0-9]"); 
Matcher m = p.matcher(s); 
boolean b = m.find(); 
if(b == true){ 
//give warning to user that special character is not allowed, 
//and delete or clear the last last character in charSequence . 

}