如何在android中只设置EditTextPreference的数值?

Ahm*_*med 36 android

如何在android中只设置EditTextPreference的数值.我希望用户输入端口号,不知道如何将限制放在那里

我正在使用此代码,用户可以输入任何字符串.想要限制用户仅限至少数字

   <EditTextPreference 
    android:defaultValue="4444" 
    android:key="port" 
    android:title="Port" 
    android:dependency="service_on"        
    />    
Run Code Online (Sandbox Code Playgroud)

Sam*_*Sam 82

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

android:inputType="number"
Run Code Online (Sandbox Code Playgroud)

或者更具体地说:

android:inputType="numberDecimal"
android:digits="0123456789"
Run Code Online (Sandbox Code Playgroud)

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

  • 这似乎不适用于appcompat 25,显示常规键盘 (19认同)
  • "为什么事情有时会在没有任何文档的情况下在android中神奇地工作?" 是的,这个是_poorly_文档,_hint_是[这里](http://developer.android.com/reference/android/preference/EditTextPreference.html)."查看EditText属性"这一行是唯一的提示......无论如何你可能想要"numberDecimal"`或考虑使用[数字](http://developer.android.com/reference/android/widget/TextView.html #attr_android%3adigits)属性与android:digits ="0123456789:"仅使用数字,句点和冒号. (17认同)
  • 在PreferenceFragmentCompat中不起作用 (6认同)
  • 我不能让它工作。没有什么能阻止输入成为任何东西,并保存为任何东西:( (4认同)
  • 甚至在 _androidx.preference.PreferenceFragmentCompat_ 中不起作用。给这个[问题](https://issuetracker.google.com/issues/37060038)加注星标 - 但不要生活在希望中。要么按照其他答案重写**曾经有效**的代码,要么使用最近更新的这个[备受推崇的修复](https://github.com/Gericop/Android-Support-Preference-V7-Fix) _实现“androidx.preference:首选项:1.1.0”_。 (4认同)

Dez*_*ezo 11

我使用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);

            }
        });

       }
Run Code Online (Sandbox Code Playgroud)

使用此代码并单击editTextPreference后,将弹出对话框,并且您的键盘输入类型将仅为数字。

  • 有点让我恼火的是你不能让它只用 XML 来工作 (8认同)

Bra*_*nor 7

androidx.preferenceandroidx.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
}
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,此回调不适用于 Android-TV 的 LeanbackEditTextPreferenceDialogFragmentCompat。可以在此处找到解决方法:/sf/answers/3935819541/ (2认同)

小智 6

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

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

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

    }
Run Code Online (Sandbox Code Playgroud)