如何在Android中设置EditTextPreference的唯一数值?

laik7k3q  于 2023-02-02  发布在  Android
关注(0)|答案(7)|浏览(393)

如何在android中只设置EditTextPreference的数值。我想让用户输入一个端口号,不知道如何才能将限制放在那里
我正在使用这个代码,用户可以输入任何字符串。希望限制用户至少只有数字

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

pepwfjgg1#

EditTextPreference小部件应该具有与常规EditText相同的属性,因此用途:

android:inputType="number"

或更具体地用途:

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

因为您希望将输入仅限制为端口号。

pftdvrlh

pftdvrlh2#

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

omjgkv6w

omjgkv6w3#

使用androidx.preference库,自2018.12.17发布androidx.preference:preference:1.1.0-alpha02以来,库中增加了EditTextPreference.OnBindEditTextListener接口,可以自定义对话框绑定后对应对话框中显示的EditText。
因此,在本例中,您所要做的就是添加下面的Kotlin代码。

val editTextPreference = preferenceManager.findPreference<EditTextPreference>("YOUR_PREFERENCE_KEY")
editTextPreference.setOnBindEditTextListener { editText ->
                editText.inputType = InputType.TYPE_CLASS_NUMBER
}
kdfy810k

kdfy810k4#

带有十进制数输入的EditTextPreference(编辑文本首选项)(Kotlin):

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

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

    }
zpjtge22

zpjtge225#

适用于我的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
         }
     }
1cosmwyk

1cosmwyk6#

使用 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可以解决这个问题。

9o685dep

9o685dep7#

对我来说,我希望只允许数字和点,以便用户可以键入IP地址。
这是JAVA

androidx.preference.EditTextPreference toesIpText = getPreferenceManager()
    .findPreference("toes_ip_address");
  assert toesIpText != null;
  toesIpText.setOnBindEditTextListener(editText -> {
    editText.setInputType(InputType.TYPE_CLASS_TEXT);
    editText.setKeyListener(DigitsKeyListener.getInstance("123456789."));
  });

相关问题