过滤表情符号时,Android 不允许在“EditText”中使用多行

Posted

技术标签:

【中文标题】过滤表情符号时,Android 不允许在“EditText”中使用多行【英文标题】:Android not allowing multi lines in `EditText` when filtering the emojis 【发布时间】:2022-01-08 03:42:09 【问题描述】:

我不允许任何特殊字符和表情符号使用此扩展功能。基本上,除了我们在allowedChars 中传递的内容之外,这将不允许任何表情符号、符号和特殊字符。

fun EditText.filterEmojisAndDigits(allowedChars: String) 
    filters = arrayOf(InputFilter  source, _, _, _, _, _ ->
        source.filter 
            Character.getType(it) != Character.SURROGATE.toInt() &&
                    Character.getType(it) != Character.OTHER_SYMBOL.toInt() &&
                    allowedChars.contains(it, false)
        
    )

这是我发的EditText

<EditText
        android:id="@+id/etAddComment"
        android:layout_
        android:layout_
        android:background="@drawable/dotted"
        android:gravity="center|start"
        android:hint="@string/enter_comments"
        android:digits="@string/supported_digits"
        android:importantForAutofill="no"
        android:inputType="textMultiLine"
        android:maxLength="950"
        android:maxLines="10"
        tools:text="Test data"
        android:minHeight="@dimen/dp_150"
        android:paddingStart="@dimen/dp_10"
        android:paddingEnd="@dimen/dp_10"
        android:textColor="@color/primary_text"
        android:textColorHint="@color/secondary_text"
        android:textSize="@dimen/sp_16" />

supported_digits 在哪里:

<string name="supported_digits">!"#$%&amp;'()*+,-./0123456789:;&lt;=&gt;?|~[\]^_`@ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz</string>

这工作正常,但不允许多行。 知道我们如何支持多行以及过滤表情符号吗?

【问题讨论】:

【参考方案1】:

只需在supported_digits 中添加\n 即可。

即,

<string name="supported_digits">!"#$%&amp;'()*+,-./0123456789:;&lt;=&gt;?|~[\]^_`@ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz\n</string>

【讨论】:

以上是关于过滤表情符号时,Android 不允许在“EditText”中使用多行的主要内容,如果未能解决你的问题,请参考以下文章

python 怎么过滤 emoji 表情符号

计算表情符号的字符长度?

允许 MySQL 以 utf8mb4 编码存储表情符号?

使用扩展语法从包含表情符号的字符串中过滤空字符串

将 IOS 表情符号转换为 web 或 android 表情符号代码

python 怎么过滤 emoji 表情符号