Android编辑文字应该只接受数字而不是表情符号,特殊图标和字母(通过键入或通过其他应用程序复制)

时间:2016-12-28 06:39:45

标签: android android-edittext

创建一个只接受数字的编辑文本,当我点击它时。它显示数字键盘。但我的问题是,当我从Whatsapp复制一个表情符号并将其粘贴到我的编辑文本框中时,它接受表情符号。我想要一个编辑文本,从其他应用程序复制后不允许接受表情符号,它应该只接受数字(通过键入或复制)注意:我不想禁用复制粘贴。

Screenshoot here

7 个答案:

答案 0 :(得分:0)

number中执行此操作,将EditText设置为具有inputType XML

android:inputType="number"

或以编程方式:

yourEditText.setInputType(InputType.TYPE_CLASS_NUMBER);

如果您要同时禁用复制,则应setInputFilteryourEditText过滤掉非数字字符。

答案 1 :(得分:0)

只需将输入类型用作数字,不允许粘贴任何内容。

CURRENT_DATE-194

OR

<EditText
            android:id="@+id/edtEnterAmount"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/enter_amount_margin"
            android:textSize="@dimen/header_three"
            android:singleLine="true"
            android:maxLength="8"
            android:inputType="numberDecimal"
            android:imeOptions="actionDone"
            android:hint="Enter amount"
            android:textColorHint="@color/gray_two" />

OR

 android:inputType="number"

OR

android:digits="0123456789"

希望这有帮助。快乐编码。

答案 2 :(得分:0)

您可以使用文本Change Listener并检查新添加的字符。

editText.addTextChangedListener(new TextWatcher() {

   public void afterTextChanged(Editable s) {}

   public void beforeTextChanged(CharSequence s, int start,
     int count, int after) {
   }

   public void onTextChanged(CharSequence s, int start,
     int before, int count) {
     //check if all characters in CharSequence is a number
   }
});

答案 3 :(得分:0)

您应该尝试在editText上使用InputFilter:

    public static class NumericInputFilter implements InputFilter {
    public CharSequence filter(CharSequence charSequence, int start, int end, Spanned dest, int dstart, int dend) {
        StringBuilder builder = new StringBuilder();
        for (int index = 0; index < end; index++) {
            char character = charSequence.charAt(index);
            if (Character.isDigit(character)) {
                builder.append(character);
            }
        }

        boolean isAllCharacterValid = (builder.length() == end - start);
        return isAllCharacterValid ? null : builder.toString();
    }
}

您可以通过以下方式在编辑文本上设置此输入过滤器:

editText.setFilters(new InputFilter[]{new NumericInputFilter()});

如果您使用此输入过滤器,无论您是复制粘贴字符还是使用键盘编写,每个字符都将被过滤,如果它不是数字,则它将不会显示在您的编辑文本中。< / p>

希望它有所帮助!

答案 4 :(得分:0)

您可以使用android:inputType="number"android:digits="0123456789"

答案 5 :(得分:0)

尝试添加 android:digits="0123456789"到你的xml文件。

答案 6 :(得分:0)

@ user3707908

砰!它完美适合我........ 我把它修改为accpet&#34;。&#34;也。

public static class NumericInputFilter implements InputFilter {
public CharSequence filter(CharSequence charSequence, int start,   int end, Spanned dest, int dstart, int dend) {
        StringBuilder builder = new StringBuilder();
        for (int index = 0; index < end; index++) {
            char character = charSequence.charAt(index);
            if (Character.isDigit(character)) {
                builder.append(character);
            } else if(Character.toString(character).equalsIgnoreCase(".")){
                builder.append(character);
            }
        }

        boolean isAllCharacterValid = (builder.length() == end - start);
        return isAllCharacterValid ? null : builder.toString();
    }
}