Avi*_*ron 44 android textview android-preferences
我有一个非常简单的问题:
我有一个EditTextPreference对话框,我想用它来获取用户的密码,我希望它被屏蔽.
我怎样才能做到这一点?
ina*_*ruk 115
以下是使用xml的简短示例:
<EditTextPreference
android:key="@string/key"
android:title="@string/title"
android:summary="@string/summary"
android:inputType="textPassword" />
Run Code Online (Sandbox Code Playgroud)
或者你可以用numberPassword而不是textPassword.
对于androidx库,您应该以编程方式执行此操作,例如您可以按如下方式执行此操作,我可以选择根据密码的长度设置带有星号的摘要:
[...]
import android.os.Bundle;
import android.text.InputType;
import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.preference.EditTextPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager;
import static androidx.preference.EditTextPreference.*;
public class MySettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
final EditTextPreference preference = findPreference("password");
if (preference != null) {
preference.setSummaryProvider(new SummaryProvider() {
@Override
public CharSequence provideSummary(Preference preference) {
String getPassword = PreferenceManager.getDefaultSharedPreferences(getContext()).getString("password", "not set");
//we assume getPassword is not null
assert getPassword != null;
//return "not set" else return password with asterisks
if (getPassword.equals("not set")) {
return getPassword;
} else {
return (setAsterisks(getPassword.length()));
}
}
});
//set input type as password and set summary with asterisks the new password
preference.setOnBindEditTextListener(
new OnBindEditTextListener() {
@Override
public void onBindEditText(@NonNull final EditText editText) {
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
preference.setSummaryProvider(new SummaryProvider() {
@Override
public CharSequence provideSummary(Preference preference) {
return setAsterisks(editText.getText().toString().length());
}
});
}
});
}
}
//return the password in asterisks
private String setAsterisks(int length) {
StringBuilder sb = new StringBuilder();
for (int s = 0; s < length; s++) {
sb.append("*");
}
return sb.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
在 xml 中你应该有类似的内容:
<EditTextPreference
android:dialogMessage="Enter your password"
android:dialogTitle="Password"
android:key="password"
android:title="Password" />
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息,请查看developer.android
| 归档时间: |
|
| 查看次数: |
25262 次 |
| 最近记录: |