首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EditTextPreference密码字段

EditTextPreference密码字段
EN

Stack Overflow用户
提问于 2018-11-08 03:21:33
回答 3查看 659关注 0票数 1

我正在尝试包括密码的EditTextPreference,并希望隐藏字符和显示星号,但无法做到这一点。

这是我的preference.xml文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<PreferenceCategory
    android:title="Scenes">
    <DropDownPreference
        android:key="scenario"
        android:title="Select scene"
        android:summary="%s"
        android:entries="@array/scenarios"
        android:entryValues="@array/scenarios_values" />
</PreferenceCategory>

<PreferenceCategory
    android:title="Demo">
    <SwitchPreference
        android:key="connect_on_startup"
        android:title="Auto Connect"
        android:defaultValue="false"
        android:summary="Connect automatically at startup" />
    <EditTextPreference
        android:title="UserName"
        android:key="username"
        android:summary="Please provide your Username"
        android:maxLines="1"
        android:singleLine="true">
    </EditTextPreference>
    <EditTextPreference
        android:inputType="textPassword"
        android:title="Password"
        android:key="password"
        android:summary="Please provide your Password"
        android:password="true" />
</PreferenceCategory>

我能做错什么呢?谢谢!

EN

回答 3

Stack Overflow用户

发布于 2018-11-08 03:38:11

android:password="true"已弃用,应改用android:inputType="textPassword"

票数 0
EN

Stack Overflow用户

发布于 2018-11-08 03:49:09

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

代码语言:javascript
复制
preference.setSummary(stringValue);

相反,您需要检查首选项是否为您的密码,并跳过设置摘要,如下所示:

代码语言:javascript
复制
if ("password".equals(preference.getKey())) {
    preference.setSummary("***");
} else {
    preference.setSummary(stringValue);
}
票数 0
EN

Stack Overflow用户

发布于 2021-02-01 04:17:40

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

代码语言:javascript
复制
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;
            }
        });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53196367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档