【问题标题】:Why I can't enforce EditTextPreference to take just numbers?为什么我不能强制 EditTextPreference 只取数字?
【发布时间】:2018-10-10 13:09:34
【问题描述】:

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

问题:我正在使用support.v7.preference,据我了解,这个库给创建自定义DialogPreference (HowTo use support.v7.preference with AppCompat and potential drawbacks) 带来了问题。无论如何,我尝试创建一个 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 只接受数字输入?

【问题讨论】:

标签: java android android-support-library edittextpreference


【解决方案1】:

您可以通过在您的 XML 文件中添加 android: inputType = "numberPassword" 来实现 然后你可以像这样在你的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 数字的键盘

【讨论】:

  • 我认为这不起作用,因为它或多或少与我试图做的事情相同。您正在使用 setInputType ,它是 EditText 类的一种方法,但我有一个 EditTextPreference 对象,我无法将其转换为 Preference,以使用 GetEditText() 来使用 setInputType。
  • 哦,我明白了...您可以通过以下方式访问这些方法:
  • EditTextPreference my_preference = (EditTextPreference) findPreference("pref_edit_text"); if (pref != null) { mypreference.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER); }
  • 这就是问题所在。使用 support.v7 库,您无法做到这一点。它引发了 ClassCastException(我已经在问题中报告了这一点)。
【解决方案2】:

尝试以下方法之一:

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
}

【讨论】:

    【解决方案3】:

    尝试将 inputType 设置为数字。

    android:inputType="number"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 2020-09-23
      相关资源
      最近更新 更多