Android過濾特殊字元和emoji表情
阿新 • • 發佈:2018-11-11
1.需求場景
現在一些輸入法自帶emoji表情,EditText是支援該字元輸入的,而對於業務來說,輸入這些字元又是不合法的,因此需要對這些字元進行過濾,在使用者輸入時即時給出提示資訊。
2.解決方法
為EditText新增輸入過濾器.
public InputFilter getInputFilterProhibitEmoji() { InputFilter filter = new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { StringBuffer buffer = new StringBuffer(); for (int i = start; i < end; i++) { char codePoint = source.charAt(i); if (!getIsEmoji(codePoint)) { buffer.append(codePoint); } else { ToastUtil.show(ApplicationContext.getString(R.string .installment_contact_detail_address_face_tip)); i++; continue; } } if (source instanceof Spanned) { SpannableString sp = new SpannableString(buffer); TextUtils.copySpansFrom((Spanned) source, start, end, null, sp, 0); return sp; } else { return buffer; } } }; return filter; } public boolean getIsEmoji(char codePoint) { if ((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD) || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF))) return false; return true; } public InputFilter getInputFilterProhibitSP() { InputFilter filter = new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { StringBuffer buffer = new StringBuffer(); for (int i = start; i < end; i++) { char codePoint = source.charAt(i); if (!getIsSp(codePoint)) { buffer.append(codePoint); } else { ToastUtil.show(ApplicationContext.getString(R.string .installment_contact_detail_address_error_tip)); i++; continue; } } if (source instanceof Spanned) { SpannableString sp = new SpannableString(buffer); TextUtils.copySpansFrom((Spanned) source, start, end, null, sp, 0); return sp; } else { return buffer; } } }; return filter; } public boolean getIsSp(char codePoint){ if(Character.getType(codePoint)>Character.LETTER_NUMBER){ return true; } return false; }
呼叫方法:
InputFilter[] filters ={getInputFilterProhibitEmoji(),getInputFilterProhibitSP()};
et_contact_detail_address.setFilters(filters);