为什么我不能强制EditTextPreference只接受数字?

时间:2018-10-10 13:09:35

标签: java android android-support-library edittextpreference

目标:使用EditTextPreference接受用户输入的数字。

问题:我正在使用support.v7.preference,据我所知,该库在创建自定义DialogPreferenceHowTo use support.v7.preference with AppCompat and potential drawbacks)时会遇到问题。无论如何,我尝试创建一个扩展NumberPickerPreference的{​​{1}},但得到DialogPreference

我还发现了另一种方法:以编程方式设置ClassCastException对象的输入类型,如下所示:

EditTextPreference

没办法,我总是得到 EditTextPreference pref = (EditTextPreference) findPreference("pref_edit_text"); if (pref != null) { pref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER); }

我尝试过的最后一种方法:修改xml

ClassCastException

android:inputType="numberDecimal" android:digits="0123456789"

再也没有办法,在android:numeric="integer"上,我得到了完整的键盘,因此用户可以编写所有内容。

是否有一种方法可以正确地强制Dialog仅接受数字输入?

3 个答案:

答案 0 :(得分:1)

尝试将inputType设置为数字。

android:inputType="number"

答案 1 :(得分:1)

尝试以下方法之一:

android:inputType="numberSigned" 
android:inputType="phone"

编辑:

android:inputType="numberDecimal|numberSigned"
android:digits="0123456789"

编辑:

如果您愿意尝试的话,可以使用这个库来使它工作:

https://github.com/Gericop/Android-Support-Preference-V7-Fix

阅读他们的github页面,您可以找到自定义输入的示例以及它们的示例代码,它们看起来与您现在正在执行的操作类似:

“该示例应用程序显示了一个示例(通过XML进行设置)和(以编程方式)查询EditTextPreference的输入类型:

<EditTextPreference
    android:inputType="phone"
    android:key="edit_text_test" />

EditTextPreference etPref = (EditTextPreference) findPreference("edit_text_test");
if (etPref != null) {
    int inputType = etPref.getEditText().getInputType();
    // do something with inputType
}

答案 2 :(得分:1)

您可以通过将android: inputType = "numberPassword"添加到XML文件中来实现 然后,您可以像这样在Java中以编程方式设置自定义键盘:

 yourEditText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD); 

下一步,您可以创建一个自定义类:

  private class YourNumericKeyboardMethod extends PasswordTransformationMethod {
    @Override
    public CharSequence getTransformation(CharSequence source, View view) {
        return source;
    }
}

最后一步是将其实现到您的EditText,以使其仅显示数字:

 yourEditText.setTransformationMethod(new YourNumericKeyboardMethod());

完成所有这些步骤后,您应该会得到一个只有数字从0到9的键盘