InputFilter的子类NumberKeyListener,DigitsKeyListener,......奇怪的行为

时间:2014-02-17 20:39:54

标签: android

预期结果:

代码:

    EditText textET = (EditText) findViewById(R.id.textET);
    textET.setFilters(new InputFilter[]{new DigitsKeyListener()});

其中main_layout.xml中的textET定义为:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent">
    <EditText
        android:id="@+id/textET"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

应生成可编辑的文本字段,用于过滤字符并仅允许数字。 但是当在软键盘上单击某些字母字符然后输入某些数字时,会发生以下情况: 首先输入的数字按预期显示。接下来输入数字重复之前并打印自己。接下来重复前一个序列并打印自己。等

例如:

首先尝试输入字母字符。没有显示任何内容。没关系。

然后点击'2' - 显示'2'。没关系。

然后点击'5' - 显示'225'。预计“25”。

然后点击'8' - 显示'225258'。预计'258'。

等等。

此外,当尝试通过“Backspace”删除最后一个字符时,它不会被删除,但会附加新的先前序列。例如:'225258'&gt; 'Backspace'打印'225258225258'

我在做什么或期待有什么问题?或者这是一个小故障?

(代码就像在这里发布一样简单。在Galaxy S2上测试,API 4.1。模拟器按预期工作。)

2 个答案:

答案 0 :(得分:0)

这个问题来自android中的键盘助手。你不应该使用过滤器。

答案 1 :(得分:0)

您应该使用:

    textET.setFilters(new InputFilter[]{
            // Maximum 2 characters.
            new InputFilter.LengthFilter( 2 ),
            // Digits only.
            DigitsKeyListener.getInstance(),  
    });