Android 更改编辑文本后';s inputType,为编辑文本输入的数字工作不正常

Android 更改编辑文本后';s inputType,为编辑文本输入的数字工作不正常,android,android-edittext,digits,Android,Android Edittext,Digits,Activity.xml <EditText android:id="@+id/et_pwd" android:layout_width="300dp" android:layout_height="37dp" android:layout_marginBottom="15dp" android:drawableLeft="@drawable/icon_password" android

Activity.xml

    <EditText
        android:id="@+id/et_pwd"
        android:layout_width="300dp"
        android:layout_height="37dp"
        android:layout_marginBottom="15dp"
        android:drawableLeft="@drawable/icon_password"
        android:hint="Password"
        android:inputType="textPassword"
        android:maxLength="20"
        android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" />

首先,我在EditText上设置了数字,如果我单击一个按钮,它就会实现上面的代码,从而更改其inputType。在我更改输入类型之前,它的数字正在工作。但是,在更改其输入类型后,由于某些原因,其数字不起作用。它允许输入特殊字符。如何改进代码以使其正常工作?

此代码将纯文本更改为密码文本,反之亦然

public void onClick(View view) {
         if(inputPassword.getInputType() == InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) {
              inputPassword.setInputType( InputType.TYPE_CLASS_TEXT |
                                        InputType.TYPE_TEXT_VARIATION_PASSWORD);
         }else {
              inputPassword.setInputType( InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD );
         }
         inputPassword.setSelection(inputPassword.getText().length());
    }
并将此筛选代码用于数字

InputFilter filter = new InputFilter() {
    public CharSequence filter(CharSequence source, int start, int end,
            Spanned dest, int dstart, int dend) {
        for (int i = start; i < end; i++) {
            if (!Character.isLetterOrDigit(source.charAt(i))) {
                return "";
            }
        }
        return null;
    }
};
edit.setFilters(new InputFilter[] { filter });
InputFilter过滤器=新的InputFilter(){
公共CharSequence筛选器(CharSequence源、int开始、int结束、,
跨越目的地、内部数据起点、内部数据起点){
for(int i=start;i
InputFilter filter = new InputFilter() {
    public CharSequence filter(CharSequence source, int start, int end,
            Spanned dest, int dstart, int dend) {
        for (int i = start; i < end; i++) {
            if (!Character.isLetterOrDigit(source.charAt(i))) {
                return "";
            }
        }
        return null;
    }
};
edit.setFilters(new InputFilter[] { filter });