私は非常に簡単な質問をします:
ユーザーのパスワードを取得するために使用するEditTextPreference
ダイアログがあり、マスクする必要があります。
どうやってやるの?
次に、xmlを使用した短い例を示します。
<EditTextPreference
Android:key="@string/key"
Android:title="@string/title"
Android:summary="@string/summary"
Android:inputType="textPassword" />
または、numberPassword
の代わりにtextPassword
を使用できます。
Android:inputType="numberPassword"
が機能しません。 Eclipseは私に、この属性にはString値は許可されていないと言っています。だから私は以下を使用しました:
<EditTextPreference
Android:key="@string/key"
Android:title="@string/title"
Android:summary="@string/summary"
Android:inputType="number"
Android:password="true" />
これにより、点線のテキスト表示と入力用の数字キーボードを備えたEditTextPreferenceが得られました。
デバイスのローテーションで次のimeOption
を追加するだけで十分な後もパスワードマスクを保持したい場合:
編集テキストレイアウト_Android:imeOptions="flagNoExtractUi"
_
またはプログラムでyourEditText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
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();
}
}
Xmlでは、次のようなものが必要です。
<EditTextPreference
Android:dialogMessage="Enter your password"
Android:dialogTitle="Password"
Android:key="password"
Android:title="Password" />
詳しくは developer.Android をご覧ください。