我正在尝试包括密码的EditTextPreference,并希望隐藏字符和显示星号,但无法做到这一点。
这是我的preference.xml文件:
<?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>我能做错什么呢?谢谢!
发布于 2018-11-08 03:38:11
android:password="true"已弃用,应改用android:inputType="textPassword"。
发布于 2018-11-08 03:49:09
如果需要隐藏摘要中显示的文本,则应在xml文件外部完成。您可能有来自android studio的代码模板,其中包含Preference.OnPreferenceChangeListener的实现。在它内部有一个回调方法,当设置改变时会调用它。默认情况下,它将摘要更改为传入的值:
preference.setSummary(stringValue);相反,您需要检查首选项是否为您的密码,并跳过设置摘要,如下所示:
if ("password".equals(preference.getKey())) {
preference.setSummary("***");
} else {
preference.setSummary(stringValue);
}发布于 2021-02-01 04:17:40
在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;
}
});https://stackoverflow.com/questions/53196367
复制相似问题