3

目标:用于EditTextPreference获取用户输入的数字。

问题:我正在使用support.v7.preference ,并且据我了解,这个库给创建自定义带来了问题DialogPreference(如何使用 support.v7.preference 和 AppCompat 以及潜在的缺点)。无论如何,我试图创建一个NumberPickerPreference扩展,DialogPreference但我得到了ClassCastException.

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

    EditTextPreference pref = (EditTextPreference) findPreference("pref_edit_text");
    if (pref != null) {
       pref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
    }

没办法,我总是得到一个ClassCastException

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

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

或者 android:numeric="integer"

没办法了,Dialog我得到了全键盘,所以用户可以写一切。

有没有办法正确强制EditTextReference只输入数字?

4

3 回答 3

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 数字的键盘

于 2018-10-11T11:27:45.663 回答
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
}
于 2018-10-10T14:23:08.407 回答
0

尝试将 inputType 设置为数字。

android:inputType="number"
于 2018-10-10T13:20:39.063 回答