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

时间:2012-11-16 22:25:46

标签: android

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

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

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

6 个答案:

答案 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
         }
     }