9

我检查了 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 属性有同样的疑问。

4

5 回答 5

3

文档没有列出该类的属性,但该InputType属性(以及其他EditTextTextView属性)仍然有效。仅在文中说明。另请参阅此相关问题

EditTextPreference文档没有明确列出它支持的所有属性,但文本指出:

请参阅EditText 属性

那里的链接不是很有用(他们可能重新组织了一些属性,但从未更新过一些链接),但这里是inputType values的直接链接。作为快速总结,这些值是(截至发布时):

  • 没有任何
  • 文本
  • textCap字符
  • textCapWords
  • textCapSentences
  • 文本自动更正
  • 文本自动完成
  • 文本多行
  • textImeMultiLine
  • textNoSuggestions
  • textUri
  • 文本电子邮件地址
  • 文本电子邮件主题
  • textShortMessage
  • textLongMessage
  • 文本人名
  • 文本邮政地址
  • 文本密码
  • textVisiblePassword
  • textWebEditText
  • 文本过滤器
  • 文字注音
  • 文本网络电子邮件地址
  • 文本网络密码
  • 数字
  • 数字签名
  • 数字十进制
  • 号码密码
  • 电话
  • 约会时间
  • 日期
  • 时间

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

于 2015-07-10T21:40:08.770 回答
1

您无法从 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
于 2015-07-10T21:30:36.440 回答
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);
        }
    });
}
于 2019-08-13T10:38:30.377 回答
0

您可以在此处找到问题的答案

基本上,您需要导入 androidX 库并遵循我的代码。

于 2019-06-25T15:15:11.710 回答
0

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

仅适用于 EditTextPreference 中的十进制值

将此代码写入onCreatePreferences

确保同时使用该类的CLASSAttributes

例子

输入类型。TYPE_CLASS_NUMBER | 输入类型。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);

    }
}
于 2021-05-15T13:32:40.693 回答