目标:使用EditTextPreference
接受用户输入的数字。
问题:我正在使用support.v7.preference
,据我所知,该库在创建自定义DialogPreference
(HowTo 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
仅接受数字输入?
答案 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的键盘