如何在android中设置EditTextPreference的数值。 我希望用户输入端口号,不知道如何将限制放在那里
我正在使用此代码,用户可以输入任何字符串。想要将用户限制为仅至少数字
<EditTextPreference
android:defaultValue="4444"
android:key="port"
android:title="Port"
android:dependency="service_on"
/>
答案 0 :(得分:82)
EditTextPreference小部件应采用与常规EditText相同的属性,因此请使用:
android:inputType="number"
或者更具体地说:
android:inputType="numberDecimal"
android:digits="0123456789"
因为您只想将输入限制为端口号。
答案 1 :(得分:4)
带有十进制数字输入(Kotlin)的EditTextPreference:
var myEditTextPreference : EditTextPreference? = findPreference("myEditTextPreferenceKey")
myEditTextPreference?.setOnBindEditTextListener { editText ->
editText.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL
}
答案 2 :(得分:3)
使用androidx.preference
库,自androidx.preference:preference:1.1.0-alpha02
于2018.12.17发行以来,library添加了EditTextPreference.OnBindEditTextListener
界面,该界面允许您自定义显示在相应内容中的EditText。对话框绑定后的对话框。
因此,在这种情况下,您要做的就是在下面添加Kotlin代码。
editTextPreference.setOnBindEditTextListener { editText ->
editText.inputType = InputType.TYPE_CLASS_NUMBER
}
答案 3 :(得分:3)
我使用androidX库,因为该库可以自定义EditTextPreference对话框的输入类型。 AndroidX是对原始Android支持库的重大改进,因此建议所有人使用此库。 您可以阅读有关AndroidX here.
的更多信息这是我在onCreatePreference方法中使用EditTextPreference的代码:
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preference, rootKey);
androidx.preference.EditTextPreference editTextPreference = getPreferenceManager().findPreference("use_key_from_editTextPreference_in_xml_file");
editTextPreference.setOnBindEditTextListener(new androidx.preference.EditTextPreference.OnBindEditTextListener() {
@Override
public void onBindEditText(@NonNull EditText editText) {
editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);
}
});
}
使用此代码并单击editTextPreference后,将弹出对话框,并且您的键盘输入类型将仅为数字。
答案 4 :(得分:2)
使用 getEditText 访问 EditTextPreference的EditText 方法,并设置输入类型
EditTextPreference pref = (EditTextPreference) findPreference("pref_edit_text");
if (pref != null) {
pref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
}
不幸的是,官方库 android.support.v7.preference 隐藏了对 getEditText 的访问权限,但是有一个fix library对此很喜欢。
答案 5 :(得分:0)
对我有用的科特林代码:
“ editTextPrefSleepTime”是EditTextPreference的键,它是我在xml文件上设置的。
private var editTextPrefSleepTime: EditTextPreference? = null
override fun onStart() {
super.onStart()
editTextPrefSleepTime = preferenceManager.findPreference("editTextPrefSleepTime")
editTextPrefSleepTime?.setOnBindEditTextListener {
it.inputType = InputType.TYPE_CLASS_NUMBER
}
}