Android EditText InputFilter无效

时间:2015-05-18 05:26:24

标签: android android-edittext android-input-filter

我有EditText,接受除空格之外的字符,我使用InputFilter来过滤输入字符,使用InputFilter来约束输入的长度,但是InputFilter 1}}不能全部工作。

我的完整代码如下所示:initBodyView()是活动的入口

public class MainActivity extends CustomedActivity{


InputFilter mcFilter = new InputFilter() {

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        for (int i = start; i < end; i++) {
            if (Character.isSpaceChar(source.charAt(i))) {
                // do something
                return "";
            }
        }
        return null;
    }
};


private TextWatcher mcTextWatcher = new TextWatcher() {

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // TODO Auto-generated method stub
        if (mVinLimit <= INPUT_LOWER_LIMIT) {
            mcFlag = true;
        }

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub
    }

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
        if (mVinLimit > INPUT_LOWER_LIMIT && mVinLimit < INPUT_UPPER_LIMIT) { 
            if (s.length() == mVinLimit) {
                mcFlag = true;
            } else {
                mcFlag = false; 
            }
        } else if (INPUT_UPPER_LIMIT == mVinLimit) { 
            if (s.length() > 0) {
                mcFlag = true;
            } else {
                mcFlag = false;
            }
        }

    }
};



// the entrance of the activity
@Override
protected void initBodyView() {
    mBodyView = inflate(R.layout.layout);
    mc = (EditText)mBodyView.findViewById(R.id.mc);
    mc.addTextChangedListener(mcTextWatcher);
    mc.setFilters(new InputFilter[] {
            new InputFilter.LengthFilter(INPUT_LIMIT), mcFilter
    });
}

}

第二个InputFilter不起作用

EditText的属性如下:

<EditText
android:id="@+id/carriage_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:inputType="textUri"
android:singleLine="true" >
</EditText>

3 个答案:

答案 0 :(得分:3)

在xml中尝试这个,

<EditText
android:id="@+id/carriage_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:digits="qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM"
android:layout_centerVertical="true"
android:inputType="textUri"
android:singleLine="true" >
</EditText>

在edittext中输入要允许的字符,

android:digits="qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM"

答案 1 :(得分:2)

TextWatcher正在获取并处理EditText的更改 而不是InputFilter。 注释下面的行,你的代码就可以了。

//mc.addTextChangedListener(mcTextWatcher);

答案 2 :(得分:0)

我发现问题出在哪里,还有一些代码重置了InputFilter的{​​{1}},因为该项目是一个团队项目,我还没找到,抱歉。谢谢你的帮助。