【问题标题】:How can I restrict EditText to take emojis如何限制 EditText 使用表情符号
【发布时间】:2017-02-26 01:39:28
【问题描述】:

我正在开发一个应用程序,我希望我的edittext 应该只使用名称。我尝试过使用android:inputType="textCapSentences",但它似乎不起作用。我的edittext仍在使用表情符号。

那么,有什么方法可以限制在 android 的编辑文本中输入任何特殊字符或表情符号。 如果有人有想法,请回复。 提前致谢。

【问题讨论】:

标签: android android-studio android-edittext


【解决方案1】:

您可以使用表情符号过滤器作为下面的代码

mEditText.setFilters(new InputFilter[]{EMOJI_FILTER});

public static InputFilter EMOJI_FILTER = new InputFilter() {
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        boolean keepOriginal = true;
        StringBuilder sb = new StringBuilder(end - start);
        for (int index = start; index < end; index++) {
            int type = Character.getType(source.charAt(index));
            if (type == Character.SURROGATE || type == Character.OTHER_SYMBOL) {
                return "";
            }
            char c = source.charAt(index);
            if (isCharAllowed(c)) 
                sb.append(c);
            else
                keepOriginal = false;
        }
        if (keepOriginal)
            return null;
        else {
            if (source instanceof Spanned) {
                SpannableString sp = new SpannableString(sb);
                TextUtils.copySpansFrom((Spanned) source, start, sb.length(), null, sp, 0);
                return sp;
            } else {
                return sb;
            }
        }
    }
};

private static boolean isCharAllowed(char c) {
    return Character.isLetterOrDigit(c) || Character.isSpaceChar(c);
}

【讨论】:

  • 但它会过滤点(“.”),逗号(“,”)和其他标点符号,而不仅仅是表情符号
【解决方案2】:

嗯,有一个技巧,但我不确定它是否对您的情况有帮助。诀窍是将 inputType 设置为 textEmailAddress

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textEmailAddress" />

你也可以看看这个answer

【讨论】:

    【解决方案3】:
    KeyListener keyListener = new TextKeyListener(TextKeyListener.Capitalize.SENTENCES, false);
    InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                    setInput(YOUR_EDIT_TEXT, keyListener, imm);
    

    【讨论】:

      【解决方案4】:

      在editText上设置一个TextWatcher,在OnTextChanged中,做如下操作,

      String s = charSequence.toString();
      Pattern p = Pattern.compile("[^A-Za-z0-9]");
      Matcher m = p.matcher(s);
      boolean b = m.find();
      if(b == true){
       //give warning to user that special character is not allowed, 
      //and delete or clear the last last character in charSequence .
      
      }
      

      【讨论】:

        猜你喜欢
        • 2017-05-20
        • 1970-01-01
        • 2012-12-09
        • 1970-01-01
        • 2015-03-23
        • 1970-01-01
        • 1970-01-01
        • 2018-10-05
        • 2021-08-05
        相关资源
        最近更新 更多