gpt4 book ai didi

android - EditTextPreference inputType=textPassword 不工作

转载 作者:行者123 更新时间:2023-12-04 01:34:39 24 4
gpt4 key购买 nike

我已经使用模板创建了一个 SettingsActivity,并将一个 EditTextPreference 放入我的 root_preferences.xml 中。它应该包含一个密码,所以我这样编辑它:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/colorBackground">

<EditTextPreference
android:id="@+id/etPassword"
android:dialogTitle="Passwort"
android:inputType="textPassword"
android:key="pref_password"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Passwort" />

我的问题是 inputType、singleLine 和 setAllOnFocus 都不起作用。你知道问题出在哪里吗?

最佳答案

在我的例子中,InputType 不会在输入时和摘要中隐藏密码。这是我解决问题的方法

XML文件

<PreferenceScreen
xmlns:app="http://schemas.android.com/apk/res-auto">
<EditTextPreference
app:key="pref_password"
app:title="Password"
app:dialogTitle="Set password"
app:useSimpleSummaryProvider="true"
/>
</PreferenceScreen>

PreferenceFragmentCompat在您的 XML 中设置,找到您的 EditTextPreferenceonCreatePreferences部分并添加 OnBindEditTextListener在上面。

public static class YourFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
// Find the password EditText
EditTextPreference etpPassword = getPreferenceManager().findPreference("pref_password");

etpPassword.setOnBindEditTextListener(new EditTextPreference.OnBindEditTextListener() {
@Override
public void onBindEditText(@NonNull EditText editText) {
// Set keyboard layout and some behaviours of the field
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

// Replace -> android:singleLine="true"
// Not needed for password field, or set it before setTransformationMethod
// otherwise the password will not be hidden
//editText.setSingleLine(true);

// Replace -> android:inputType="textPassword"
// For hiding text
editText.setTransformationMethod(PasswordTransformationMethod.getInstance());

// Replace -> android:selectAllOnFocus="true"
// On password field, you cannot make a partial selection with .setSelection(start, stop)
editText.selectAll();

// Replace -> android:maxLength="99"
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(99)});
}
});
}
}

您也可以创建自己的 EditTextPreference上课并设置其他东西。

public class YourEditTextPreference extends EditTextPreference {

// Add some preferences, which can be used later for checking
private Integer mPasswordMinSize = 6;

public EditTextPreferencePassword(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}

public EditTextPreferencePassword(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}

public EditTextPreferencePassword(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

public EditTextPreferencePassword(Context context) {
super(context);
init();
}

private void init(){
// Set Dialog button text
this.setNegativeButtonText("RETURN");
this.setPositiveButtonText("CHECK");

this.setOnBindEditTextListener(new OnBindEditTextListener() {
@Override
public void onBindEditText(@NonNull EditText editText) {
// Put field parameters here
}
});
}

public void setMinSize(int minSize) { mPasswordMinSize = minSize; }
public Integer getMinSize(){ return mPasswordMinSize; }

// Hide password by stars
@Override
public CharSequence getSummary() {
return getText().equals("") ? super.getSummary() : "*******";
}
}

在您的 XML 中,更改 <EditTextPreference<complet.path.to.YourEditTextPreference

关于android - EditTextPreference inputType=textPassword 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60026306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com