前言背景
因为公司后端不可以存Emoji表情,所以安卓端输入的时候需要过滤掉,Emoji表情,意思是,点击表情时不可以进入输入框EditText内
代码
import android.text.InputFilter
import android.text.Spanned
import java.util.regex.Pattern
/**
* author: congduan
*
* time: 2023/5/19
*
* desc:
*/
open class EmojiInputFilter : InputFilter {
private val emoji = Pattern.compile(
"[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
Pattern.UNICODE_CASE or Pattern.CASE_INSENSITIVE
)
override fun filter(source: CharSequence?, start: Int, end: Int, dest: Spanned?, dstart: Int, dend: Int): CharSequence? {
val emojiMatcher = emoji.matcher(source ?: "")
if (emojiMatcher.find()) {
return ""
} else {
for (i in start until end) {
val type = Character.getType(source?.get(i) ?: ' ')
if (type == Character.SURROGATE.toInt() || type == Character.OTHER_SYMBOL.toInt()) {
return ""
}
}
}
return null
}
}
使用
edittext.filters = arrayOf(EmojiInputFilter())