【问题标题】:How can we use android:inputType in EditTextPreference?我们如何在 EditTextPreference 中使用 android:inputType?
【发布时间】:2015-07-10 21:17:16
【问题描述】:

我查看了 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 被忽略了吗?我看不到它在哪里使用。

标签: android xml edittextpreference


【解决方案1】:

文档没有列出该类的属性,但InputType 属性(以及其他EditTextTextView 属性)仍然有效。仅在文中说明。另见this related question

EditTextPreference documentation 没有明确列出它支持的所有属性,但文字说明:

EditText Attributes

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

  • 文字
  • textCapCharacters
  • textCapWords
  • textCapSentences
  • 文本自动更正
  • 文本自动完成
  • 文本多行
  • textImeMultiLine
  • textNoSuggestions
  • textUri
  • 文本电子邮件地址
  • textEmailSubject
  • textShortMessage
  • textLongMessage
  • textPersonName
  • textPostalAddress
  • 文本密码
  • textVisiblePassword
  • textWebEditText
  • 文本过滤器
  • 文字拼音
  • textWebEmailAddress
  • textWebPassword
  • 号码
  • 数字签名
  • 数字十进制
  • 号码密码
  • 电话
  • 日期时间
  • 日期
  • 时间

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

【讨论】:

    【解决方案2】:

    您无法从 XML 中执行此操作,但 EditTextpreference exposes the EditText 因此您可以通过编程方式执行此操作。在 Activity/Fragment 中加载首选项后,您可以:

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

    【讨论】:

      【解决方案3】:

      使用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);
              }
          });
      }
      

      【讨论】:

        【解决方案4】:

        您可以找到问题的答案here

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

        【讨论】:

          【解决方案5】:

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

          仅适用于 EditTextPreference 中的十进制值

          onCreatePreferences

          中写下这段代码

          确保同时使用该类的 CLASSAttributes

          例子

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-23
            • 1970-01-01
            相关资源
            最近更新 更多