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

このライブラリにはEditTextPreferenceダイアログの入力タイプをカスタマイズできる可能性があるため、androidXライブラリを使用します。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-alpha02すると、2018.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

10進数入力のある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」は、xmlファイルに設定したEditTextPreferenceのキーです。

    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 に答える