我们如何在EditTextPreference中使用android:inputType?

10

我查看了EditTextPreference的文档,http://developer.android.com/reference/android/preference/EditTextPreference.html

但是我没有在那里找到android:inputType属性。那么它如何在这段代码中使用呢?

<EditTextPreference
        android:key="edit"
        android:title="@string/location1"
        android:summary="@string/summary1"
        android:dialogTitle="@string/location1"
        android:dialogMessage="@string/message"
        android:inputType="text"
        android:singleLine="true"
        />

android:singleLine 属性是否存在同样的疑问。


android:summary被忽略了吗?我看不到它的使用位置。 - Yetti99
这个回答解决了你的问题吗?[EditText,inputType值(XML)](https://dev59.com/j3E85IYBdhLWcg3wkkY8) - user985366
5个回答

3
文档中没有列出该类的属性,但是InputType属性(以及其他EditTextTextView属性)仍然有效。这只是在文本中说明。另请参见相关问题EditTextPreference文档没有明确列出其支持的所有属性,但文本中指出:

请参见EditText Attributes

那里的链接不是很有用(他们可能重新组织了一些属性但从未更新某些链接),但这里是一个直接链接到inputType values。简要总结这些值为(截至发布时):
  • none(无)
  • text(文本)
  • textCapCharacters(大写字母)
  • textCapWords(首字母大写)
  • textCapSentences(句子开头大写)
  • textAutoCorrect(自动纠正)
  • textAutoComplete(自动完成)
  • textMultiLine(多行文本)
  • textImeMultiLine(IME多行文本)
  • textNoSuggestions(不建议)
  • textUri(URI)
  • textEmailAddress(电子邮件地址)
  • textEmailSubject(电子邮件主题)
  • textShortMessage(短信)
  • textLongMessage(长短信)
  • textPersonName(人名)
  • textPostalAddress(邮政地址)
  • textPassword(密码)
  • textVisiblePassword(可见密码)
  • textWebEditText(Web编辑文本)
  • textFilter(文本过滤器)
  • textPhonetic(音标)
  • textWebEmailAddress(Web电子邮件地址)
  • textWebPassword(Web密码)
  • number(数字)
  • numberSigned(带符号数字)
  • numberDecimal(小数)
  • numberPassword(数字密码)
  • phone(电话号码)
  • datetime(日期时间)
  • date(日期)
  • time(时间)

您可以使用其中一个或多个,用|分隔(我从未这样做过)。


2

你不能从XML中实现,但是EditTextPreference公开了EditText,所以你可以通过编程来实现。在Activity/Fragment中加载首选项后,你可以执行以下操作:

EditTextPreference pref = (EditTextPreference) PreferenceManager.findPreference("edit");
EditText prefEditText = pref.getEditText();
prefEditText.setInputType(InputType.TYPE_CLASS_TEXT);
prefEditText.setSingleLine(true);
// etc

1
使用 AndroidX,例如将输入类型设置为密码:

root_preferences.xml:

<androidx.preference.PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <Preference
        android:title="Password"
        android:key="my_pref_password"/>
</androidx.preference.PreferenceScreen>

在你的设置片段中:
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
    setPreferencesFromResource(R.xml.root_preferences, rootKey);


    EditTextPreference pref = findPreference("my_pref_password");
    pref.setOnBindEditTextListener(new EditTextPreference.OnBindEditTextListener() {
        @Override
        public void onBindEditText(@NonNull EditText editText) {
            editText.setInputType(InputType.TYPE_CLASS_TEXT |
                            InputType.TYPE_TEXT_VARIATION_PASSWORD);
        }
    });
}

0

#最简单和经过测试的答案#

仅适用于EditTextPreference中的十进制值

onCreatePreferences中编写此代码

确保同时使用属性

例如

InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL

public static class SettingsFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.root_preferences, rootKey);

        EditTextPreference new_bonus= findPreference("new_bonus");
        EditTextPreference old_bonus= findPreference("old_bonus");


        EditTextPreference.OnBindEditTextListener onBindEditTextListener = new EditTextPreference.OnBindEditTextListener() {
            @Override
            public void onBindEditText(@NonNull EditText editText) {
                editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
            }
        };

        old_bonus.setOnBindEditTextListener(onBindEditTextListener);
        new_bonus.setOnBindEditTextListener(onBindEditTextListener);

    }
}

0

你可以在这里找到你问题的答案。

基本上,你需要导入androidX库并按照我的代码进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接