Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中仅为EditTextPreference设置数值?_Android - Fatal编程技术网

如何在android中仅为EditTextPreference设置数值?

如何在android中仅为EditTextPreference设置数值?,android,Android,如何在android中仅为EditTextPreference设置数值。 我希望用户输入一个端口号,但不确定如何将限制放在那里 我正在使用此代码,用户可以输入任何字符串。要将用户限制为至少个数字吗 <EditTextPreference android:defaultValue="4444" android:key="port" android:title="Port" android:dependency="service_on"

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

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

   <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

    }