以编程方式更改Android:digits

5
我有以下的布局 xml:
android:digits="0123456789."
android:inputType="phone" />

我想要的是能够以编程方式更改它,并能够来回更改。

输入类型部分已经没问题了。

manual_ip.setInputType(InputType.TYPE_CLASS_TEXT);

或者

manual_ip.setInputType(InputType.TYPE_CLASS_PHONE);

但是我对数字部分一窍不通... 我需要将字符限制为“0123456789.”或根据复选框状态允许任何字符。


请查看以下链接获取可行的答案: https://dev59.com/42w05IYBdhLWcg3wVwY4#65073302 - Asad
3个回答

9

添加

manual_ip.setKeyListener(DigitsKeyListener.getInstance("0123456789."));

之后

manual_ip.setInputType(InputType.TYPE_CLASS_PHONE);

并且没有其他内容

manual_ip.setInputType(InputType.TYPE_CLASS_TEXT);

解决了我的问题!


2
尝试将 InputFilter 用作:
    InputFilter[] digitsfilters = new InputFilter[1];
    digitsfilters[0] = new InputFilter(){

    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        // TODO Auto-generated method stub
        if (end > start) {

            char[] acceptedChars = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

            for (int index = start; index < end; index++) {
                if (!new String(acceptedChars).contains(String.valueOf(source.charAt(index)))) {
                return "";
                }
            }
        }
                return null;
    }
};
manual_ip= (EditText)findViewById(R.id.manual_ip);
manual_ip.setFilters(digitsfilters);

这应该被接受为最佳答案,因为您可以根据自己的需要执行自定义过滤器!这正是我在寻找的。 - Marcello Câmara
如果我设置电话输入类型为过滤非数字,并且不做任何更改。keyListener = DigitsKeyListener.getInstance("012...") 是以编程方式重载android:digits运算符的正确方法,使用setFilters会添加额外的过滤器,但不会改变inputType的默认行为。 - Michał Ziobro

0

只需把这个写下来。

myEditText.setFilters( new InputFilter[] {
    new PasswordCharFilter(), new InputFilter.LengthFilter(20)});

或者

TextView editEntryVew = new TextView(...);
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(8);
editEntryView.setFilters(FilterArray);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接