49

如何在 android 中仅设置 EditTextPreference 的数值。我希望用户输入端口号,但不确定如何将限制放在那里

我正在使用此代码,用户可以输入任何字符串。只想将用户限制为至少数字

   <EditTextPreference 
    android:defaultValue="4444" 
    android:key="port" 
    android:title="Port" 
    android:dependency="service_on"        
    />    
4

6 回答 6

83

EditTextPreference 小部件应采用与常规 EditText 相同的属性,因此请使用:

android:inputType="number"

或更具体地使用:

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

因为您只想将输入限制为端口号。

于 2012-11-16T22:29:00.563 回答
38

我使用 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 后,将弹出对话框,您的键盘输入类型将仅为数字。

于 2019-06-25T14:01:56.107 回答
16

使用androidx.preference库,自androidx.preference:preference:1.1.0-alpha022018年12月17日发布以来,该增加了EditTextPreference.OnBindEditTextListener界面,允许您自定义对话框绑定后显示在相应对话框中的EditText。

所以在这种情况下,你所要做的就是在下面添加 Kotlin 代码。

val editTextPreference = preferenceManager.findPreference<EditTextPreference>("YOUR_PREFERENCE_KEY")
editTextPreference.setOnBindEditTextListener { editText ->
                editText.inputType = InputType.TYPE_CLASS_NUMBER
}
于 2019-04-01T17:58:08.103 回答
6

带有十进制数字输入的 EditTextPreference (Kotlin):

var myEditTextPreference : EditTextPreference? = findPreference("myEditTextPreferenceKey")

    myEditTextPreference?.setOnBindEditTextListener { editText ->
        editText.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL

    }
于 2020-04-25T19:52:23.793 回答
3

使用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的访问,但是有一个修复库可以解决这个问题。

于 2018-08-17T11:33:04.897 回答
3

对我有用的 Kotlin 代码:

这里的“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
         }
     }
于 2019-10-09T11:44:05.590 回答