android - 从软键盘 android xamarin 禁用表情符号

标签 android xamarin.android

我想禁用或限制用户在 EditText 中输入表情符号。我尝试添加一个带有正则表达式的输入过滤器,但没有成功。它一次又一次地重复相同的文本。

public class EmojiFilter : Java.Lang.Object, IInputFilter
{
    string regex = "^[0-9A-Za-z #$,\\-\\.]{0,255}$";

    public ICharSequence FilterFormatted(ICharSequence source, int start, int end, ISpanned dest, int dstart, int dend)
    {
        if (System.Text.RegularExpressions.Regex.IsMatch(dest.ToString(), regex) || dest.ToString().Equals(""))
        {
            return new Java.Lang.String(source.ToString());
        }

        return new Java.Lang.String(string.Empty);
    }
}

我想在我的应用程序中的所有 EditText 中禁用它。有没有更简单的方法来实现这一点?

编辑 它仍然不适用于@Ilya Lavrov 代码。我仍然需要一些笑脸。

enter image description here enter image description here

最佳答案

您需要将 EmojiFilter 添加到您的 EditText。这是实现:

    public class EmojiFilter: Java.Lang.Object, IInputFilter
    {
        public ICharSequence FilterFormatted(ICharSequence source, int start, int end, ISpanned dest, int dstart, int dend)
        {
            for (int i = start; i < end; i++)
            {
                int type = Character.GetType(source.CharAt(i));

                if (type == Character.Surrogate || type == Character.OtherSymbol)
                    return new Java.Lang.String(string.Empty);
                else
                    return source;
            }

            return source;
        }
    }

使用方法:

YourCustomEditText.SetFilters(new IInputFilter[] { new EmojiExcludeFilter() });

要在您的应用程序中的所有 EditText 中禁用它,您需要像这样创建自己的控件:

[Register("EmojiExcludedEditText")]
public class EmojiExcludedEditText: EditText
{
    ...
    public EmojiExcludedEditText(Context context) : base(context)
    {
        SetFilters(new IInputFilter[] { new EmojiExcludeFilter() });
    }
    ...
}

编码愉快! :)

关于android - 从软键盘 android xamarin 禁用表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55042393/

相关文章:

Android Studio 有 2 个用于同一 Activity 的布局 Activity 文件。有必要吗?如何为所有较新的 SDK 版本保留 1 个文件?

android - 设置浅色导航栏使其不可见

xamarin.android - 错误 :The "GenerateJavaStubs" task failed unexpectedly

android - 用于 retrofit 和最新版本 okhttp 的 build.gradle 依赖项

java - Facebook SDK 3.0 上传图片到facebook页面(不在相册)

android - java.lang.UnsupportedOperationException : Can't convert to dimension: type=0x12

c# - 如何获取所有可用的蓝牙设备 android c# xamarin

android - fragment 向上滑动动画不显示下方的 fragment

c# - 在 Xamarin Android 中启用 Multi-Dex 后出错

android - 如何缩放到足以展开带有 Android Maps Extensions 的群集?