EditTextPreference密码字段

时间:2018-11-07 19:21:33

标签: android

我正在尝试为密码添加<div id="block-1"> <div id="inner-block"></div> </div> <div id="block-2"></div>,并且想要隐藏字符并显示星号,但无法这样做。

这是我的preference.xml文件:

EditTextPreference

我做错了什么? 谢谢!

3 个答案:

答案 0 :(得分:0)

android:password="true"已过时,您应改用android:inputType="textPassword"

答案 1 :(得分:0)

如果您需要隐藏摘要中显示的文本,则应在xml文件之外进行。您可能具有来自Android Studio的代码模板,其中包含Preference.OnPreferenceChangeListener的实现。内部有更改设置时调用的回调方法。默认情况下,它将摘要更改为传入值:

preference.setSummary(stringValue);

相反,您需要检查首选项是否是您的密码,并跳过设置摘要的操作,例如:

if ("password".equals(preference.getKey())) {
    preference.setSummary("***");
} else {
    preference.setSummary(stringValue);
}

答案 2 :(得分:0)

在 Androidx 中,这必须通过以下两步过程来完成

EditTextPreference passwordEditText = (EditTextPreference)findPreference("password");

        passwordEditText.setOnBindEditTextListener(new androidx.preference.EditTextPreference.OnBindEditTextListener() {
            @Override
            public void onBindEditText(@NonNull EditText editText) {
                editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
            }
        });
        passwordEditText.setSummaryProvider(new Preference.SummaryProvider() {
            @Override
            public CharSequence provideSummary(Preference preference) {
                int valueSize= PreferenceManager.getDefaultSharedPreferences(getContext()).getString(preference.getKey(),"").length();
               String newSummary="";
                for (int i = 0; i < valueSize; i++) {
                  newSummary+="*";
                }
                return newSummary;
            }
        });