Android EditText输入忽略/过滤 Emoji表情包

902 阅读1分钟

前言背景

因为公司后端不可以存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())