如何在android中仅为EditTextPreference设置数值?
如何在android中仅为EditTextPreference设置数值。 我希望用户输入一个端口号,但不确定如何将限制放在那里 我正在使用此代码,用户可以输入任何字符串。要将用户限制为至少个数字吗如何在android中仅为EditTextPreference设置数值?,android,Android,如何在android中仅为EditTextPreference设置数值。 我希望用户输入一个端口号,但不确定如何将限制放在那里 我正在使用此代码,用户可以输入任何字符串。要将用户限制为至少个数字吗 <EditTextPreference android:defaultValue="4444" android:key="port" android:title="Port" android:dependency="service_on"
<EditTextPreference
android:defaultValue="4444"
android:key="port"
android:title="Port"
android:dependency="service_on"
/>
EditTextPreference小部件应采用与常规EditText相同的属性,因此请使用:
android:inputType="number"
或更具体地使用:
android:inputType="numberDecimal"
android:digits="0123456789"
因为您只想将输入限制为端口号。使用getEditText访问EditTextPreference的EditText方法并设置输入类型
不幸的是,官方图书馆android.support.v7.preference隐藏了对getEditText的访问,但有一种方法可以解决这个问题。使用
androidx.preference
图书馆,因为androidx.preference:preference:1.1.0-alpha02
于2018年12月17日重新启用,添加EditTextPreference.OnBindEditTextListener
界面,允许您自定义绑定对话框后相应对话框中显示的编辑文本
所以在本例中,您所要做的就是添加下面的Kotlin代码
val editTextPreference = preferenceManager.findPreference<EditTextPreference>("YOUR_PREFERENCE_KEY")
editTextPreference.setOnBindEditTextListener { editText ->
editText.inputType = InputType.TYPE_CLASS_NUMBER
}
val editTextPreference=preferenceManager.findPreference(“您的首选项密钥”)
editTextPreference.setOnBindEditTextListener{editText->
editText.inputType=inputType.TYPE\类别\编号
}
我使用androidX库,因为该库可以自定义EditTextPreference对话框的输入类型。AndroidX是对原始Android支持库的重大改进,因此建议每个人都使用该库。
您可以阅读更多关于AndroidX的信息
以下是我在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后,将弹出对话框,您的键盘输入类型将仅为数字。适用于我的Kotlin代码: 这里的“editTextPrefSleepTime”是我在xml文件中设置的EditTextPreference的一个键
private var editTextPrefSleepTime: EditTextPreference? = null
override fun onStart() {
super.onStart()
editTextPrefSleepTime = preferenceManager.findPreference("editTextPrefSleepTime")
editTextPrefSleepTime?.setOnBindEditTextListener {
it.inputType = InputType.TYPE_CLASS_NUMBER
}
}
带十进制数字输入的EditTextPreference(Kotlin):
谢谢,EditTextPreference不是EditText的特色,所以我只是想知道android文档中提到了什么?为什么在安卓系统中,没有任何文档,事情有时会神奇地运行?你能分享一份推荐信吗?谢谢“为什么在安卓系统中,没有任何文档的情况下,事情有时会神奇地运行?”是的,这一个文档记录得很差,提示是。“查看EditText属性”行是唯一的提示。。。不管怎样,你可能想要<代码>“数字十进制”< />代码,或者考虑使用Android的属性:数字=“0123456789”:只使用数字、句号和冒号。没有任何东西可以阻止输入成为任何东西,并将其保存为任何东西:(在androidx.preference.PreferenceFragmentCompat.Star中甚至不起作用-但不要活在希望中。要么根据其他答案重写曾经起作用的代码,要么使用最近为实现而更新的代码“androidx。首选项:首选项:1.1.0"。不幸的是,此回调不适用于Android TV的LeanbackEditTextPreferenceDialogFragmentCompat。可以在此处找到解决方法:@Itaybiano是的,您是对的。此特定接口尚未在
Leanback Preference
包中实现。我提到的方法仅在EditTextPreference
中可用据我所知,我有点恼火,你不能让它只与XML@JacobSchneider是的,只是让我想保持原样。它可以工作,但我必须删除@NonNull注释。它还显示像%&/*这样的特殊字符,不输入任何内容。提示:如果删除“InputType.TYPE\u NUMBER\u FLAG\u SIGNED”部分它不允许您输入负号,这正是我所需要的。是否按照Easter设置属性?好的,这一项有效,“Sam’s accepted 2012答案”无效。另请参见以下AndroidX答案:
private var editTextPrefSleepTime: EditTextPreference? = null
override fun onStart() {
super.onStart()
editTextPrefSleepTime = preferenceManager.findPreference("editTextPrefSleepTime")
editTextPrefSleepTime?.setOnBindEditTextListener {
it.inputType = InputType.TYPE_CLASS_NUMBER
}
}
var myEditTextPreference : EditTextPreference? = findPreference("myEditTextPreferenceKey")
myEditTextPreference?.setOnBindEditTextListener { editText ->
editText.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL
}