我们如何在 EditTextPreference 中使用 android:inputType?
How can we use android:inputType in EditTextPreference?
我查看了EditTextPreference的文档
http://developer.android.com/reference/android/preference/EditTextPreference.html
但是我在那里找不到 android:inputType 属性。那么这个代码段怎么用
<EditTextPreference
android:key="edit"
android:title="@string/location1"
android:summary="@string/summary1"
android:dialogTitle="@string/location1"
android:dialogMessage="@string/message"
android:inputType="text"
android:singleLine="true"
/>
同样对android:singleLine属性有疑问。
您无法从 XML 执行此操作,但可以通过 EditTextpreference exposes the EditText 以编程方式执行此操作。在 Activity/Fragment 中加载首选项后,您可以:
EditTextPreference pref = (EditTextPreference) PreferenceManager.findPreference("edit");
EditText prefEditText = pref.getEditText();
prefEditText.setInputType(InputType.TYPE_CLASS_TEXT);
prefEditText.setSingleLine(true);
// etc
文档没有列出 class 的属性,但 InputType
属性(以及其他 EditText
和 TextView
属性)仍然有效。仅在文中说明。另见 this related question.
EditTextPreference
documentation 没有明确列出它支持的所有属性,但文本指出:
See EditText Attributes.
那里的 link 不是很有用(他们可能重新组织了一些属性,但从未更新过一些 link),但这里有一个直接 link 到 inputType values。作为快速总结,这些值是(截至发布时):
- none
- 文字
- textCapCharacters
- textCapWords
- textCapSentences
- 文本自动更正
- 文本自动完成
- 文本多行
- textImeMultiLine
- textNoSuggestions
- textUri
- 文本电子邮件地址
- textEmailSubject
- textShortMessage
- textLongMessage
- 文本人物姓名
- 文本邮政地址
- 文本密码
- textVisiblePassword
- textWebEditText
- 文本过滤器
- 文本语音
- textWebEmailAddress
- 文本网络密码
- 人数
- 签名数
- 十进制数
- 数字密码
- phone
- 日期时间
- 日期
- 时间
你显然可以使用其中的一个或多个,用 |
分隔(虽然我从来没有这样做过)。
您可以找到问题的答案here
基本上,您需要导入androidX库并按照我的代码进行操作。
使用AndroidX,设置输入类型为密码,例如:
root_preferences.xml:
<androidx.preference.PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:title="Password"
android:key="my_pref_password"/>
</androidx.preference.PreferenceScreen>
在您的设置片段中:
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
EditTextPreference pref = findPreference("my_pref_password");
pref.setOnBindEditTextListener(new EditTextPreference.OnBindEditTextListener() {
@Override
public void onBindEditText(@NonNull EditText editText) {
editText.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
});
}
#最简单且经过测试的答案#
对于 EditTextPreference 中的仅十进制值
在onCreatePreferences
中写入这段代码
确保同时使用CLASS和属性 class
示例
InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL
public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
EditTextPreference new_bonus= findPreference("new_bonus");
EditTextPreference old_bonus= findPreference("old_bonus");
EditTextPreference.OnBindEditTextListener onBindEditTextListener = new EditTextPreference.OnBindEditTextListener() {
@Override
public void onBindEditText(@NonNull EditText editText) {
editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
}
};
old_bonus.setOnBindEditTextListener(onBindEditTextListener);
new_bonus.setOnBindEditTextListener(onBindEditTextListener);
}
}
我查看了EditTextPreference的文档 http://developer.android.com/reference/android/preference/EditTextPreference.html
但是我在那里找不到 android:inputType 属性。那么这个代码段怎么用
<EditTextPreference
android:key="edit"
android:title="@string/location1"
android:summary="@string/summary1"
android:dialogTitle="@string/location1"
android:dialogMessage="@string/message"
android:inputType="text"
android:singleLine="true"
/>
同样对android:singleLine属性有疑问。
您无法从 XML 执行此操作,但可以通过 EditTextpreference exposes the EditText 以编程方式执行此操作。在 Activity/Fragment 中加载首选项后,您可以:
EditTextPreference pref = (EditTextPreference) PreferenceManager.findPreference("edit");
EditText prefEditText = pref.getEditText();
prefEditText.setInputType(InputType.TYPE_CLASS_TEXT);
prefEditText.setSingleLine(true);
// etc
文档没有列出 class 的属性,但 InputType
属性(以及其他 EditText
和 TextView
属性)仍然有效。仅在文中说明。另见 this related question.
EditTextPreference
documentation 没有明确列出它支持的所有属性,但文本指出:
See EditText Attributes.
那里的 link 不是很有用(他们可能重新组织了一些属性,但从未更新过一些 link),但这里有一个直接 link 到 inputType values。作为快速总结,这些值是(截至发布时):
- none
- 文字
- textCapCharacters
- textCapWords
- textCapSentences
- 文本自动更正
- 文本自动完成
- 文本多行
- textImeMultiLine
- textNoSuggestions
- textUri
- 文本电子邮件地址
- textEmailSubject
- textShortMessage
- textLongMessage
- 文本人物姓名
- 文本邮政地址
- 文本密码
- textVisiblePassword
- textWebEditText
- 文本过滤器
- 文本语音
- textWebEmailAddress
- 文本网络密码
- 人数
- 签名数
- 十进制数
- 数字密码
- phone
- 日期时间
- 日期
- 时间
你显然可以使用其中的一个或多个,用 |
分隔(虽然我从来没有这样做过)。
您可以找到问题的答案here
基本上,您需要导入androidX库并按照我的代码进行操作。
使用AndroidX,设置输入类型为密码,例如:
root_preferences.xml:
<androidx.preference.PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:title="Password"
android:key="my_pref_password"/>
</androidx.preference.PreferenceScreen>
在您的设置片段中:
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
EditTextPreference pref = findPreference("my_pref_password");
pref.setOnBindEditTextListener(new EditTextPreference.OnBindEditTextListener() {
@Override
public void onBindEditText(@NonNull EditText editText) {
editText.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
});
}
#最简单且经过测试的答案#
对于 EditTextPreference 中的仅十进制值
在onCreatePreferences
中写入这段代码确保同时使用CLASS和属性 class
示例
InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL
public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
EditTextPreference new_bonus= findPreference("new_bonus");
EditTextPreference old_bonus= findPreference("old_bonus");
EditTextPreference.OnBindEditTextListener onBindEditTextListener = new EditTextPreference.OnBindEditTextListener() {
@Override
public void onBindEditText(@NonNull EditText editText) {
editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
}
};
old_bonus.setOnBindEditTextListener(onBindEditTextListener);
new_bonus.setOnBindEditTextListener(onBindEditTextListener);
}
}