从SoftKeyboard Android Xamarin禁用表情符号

时间:2019-03-07 11:09:42

标签: 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

1 个答案:

答案 0 :(得分:0)

您需要将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() });
    }
    ...
}

祝您生日快乐! :)