我有一个数字,EditTextPreference其中必须是 0-9 的数字。我可以阻止其他字符,但不能阻止退格。Backspace + 好的 = 一个空值。空值意味着当它被检索并解析为一个数字时,它会崩溃。
目前,我会检查首选项何时发生变化,是否有特定键且没有长度,如果有,我会重新保存为“0”。有没有更简单的内置方法来做到这一点?一个“需要值”属性,或者至少是一些更自动的东西,比如能够获得digits更改后的偏好?(如果数字是“0123456789”,那么它不能为空)。
到目前为止,在设置活动中我有:
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
//Prevent EditText from being non number
String type = this.findPreference(key).getClass().getSimpleName();
if( type.equals("EditTextPreference")
//Put key of any allowed to be blank here...
&& prefs.getString(key, "0").length()==0 ){
this.findPreference(key).setSummary("0");
SharedPreferences.Editor prefedit = prefs.edit();
prefedit.putString(key, "0");
prefedit.commit();
}
updateSummaries();
}
Run Code Online (Sandbox Code Playgroud)
(设置摘要不起作用--^。能够检查android:digits="0123456789"属性就可以了,所以我不需要输入任何应该为空白的键。)
或者在主要活动中,我可以将所有数字首选项放入字符串中,检查字符串,如果不好将其设置为 0,然后解析每个字符串。当我使用更多它们时,这感觉不那么吸引人,而不是自动的。
String sTT = prefs.getString("mykey", "0");
>> x10
if(sTT.length()==0){ sTT="0"; }
>> x10
tt = Long.parseLong( …Run Code Online (Sandbox Code Playgroud) 我想自定义我的EditTextPreference,所以我TextView在我的EditTextPreference.
这是我的代码:
<EditTextPreference
android:key="alert_planed_edittext_preference"
android:title="@string/alert_planed_edittext_preference"
android:summary="@string/alert_planed_summary_edittext_preference"
android:dialogTitle="@string/alert_planed_dialog_title_edittext_preference" />
Run Code Online (Sandbox Code Playgroud)
这就是我在我的应用程序中得到的:

我想自定义我的 EditTextPreference,这就是我想要的:

我想在右边添加数字,我可以这样做吗?
当我点击我得到这个对话框:

我希望用户只能选择数字,我该怎么做?
编辑:我找到了第二个问题的解决方案:
<EditTextPreference
android:key="alert_planed_edittext_preference"
android:title="@string/alert_planed_edittext_preference"
android:summary="@string/alert_planed_summary_edittext_preference"
android:dialogTitle="@string/alert_planed_dialog_title_edittext_preference"
android:numeric="integer" />
Run Code Online (Sandbox Code Playgroud) 如何在edittextpreference对话框中设置null验证,这样如果它为null,则用户不应该单击ok,并且应该在对话框本身中显示一些消息.我一直试图找到它很长一段时间但没有成功......
android preferenceactivity android-alertdialog edittextpreference
最近,我将我的 android 项目迁移到了 AndroidX,并使用了 AndroidX 库中的 EditTextPreference。现在,我想将 EditTextPreference 的最大长度设置为 50。我尝试使用:
android:maxLength="50"
Run Code Online (Sandbox Code Playgroud)
但它不起作用。
似乎所有 android 命名空间都不适用于 EditTextPreference 并且没有代码建议,所以我找不到任何相关代码来设置最大长度。如何设置最大长度?
反正是否有一个EditTextPreference单行?我认为默认情况下没有属性,可以做到这一点.有必要重写对象吗?有人这样做过吗?
我试图阻止用户将空字符串输入EditTextPreference(在示例中,catName)。我使用 aOnPreferenceChangeListener来检测何时对 进行了更改EditTextPreference,如果有更改并且字符串为空,我使用该EditTextPreference.setText()命令重置为旧值。但是,如果我EditTextPreference在 GUI 中重新打开 新值(字符串为空),则新值无法正确显示,如果我返回主应用程序,我可以验证是否将空白值保存到首选项中。
我已验证 if 语句是否按预期执行,并且跟踪旧名称 ( oldCatName) 的参数正在按预期更新。我什至可以catName.getText()在setOnPreferenceChangeListener完成执行之前记录该值,并且我总是看到我期望的值(用户设置的新值,当他们输入一个空白值时,它会正确地重置为旧值)。我不确定为什么将值设置EditTextPreference为 不会将值保存到首选项文件或更新 GUI。
public class SettingsActivity extends PreferenceActivity {
private String oldCatName;
private EditTextPreference catName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
catName = (EditTextPreference) findPreference("cat_name");
oldCatName = catName.getText();
catName.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
final String value = (String) newVal;
if (value.equals("")) { …Run Code Online (Sandbox Code Playgroud) android preferenceactivity sharedpreferences edittextpreference
我是android开发的新手.我刚刚在android中听说过偏好屏幕.所以我刚做了一个.这只是在对话框中输入名称.
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<EditTextPreference
android:title="Name"
android:summary="To enter name click on Name"
android:dialogTitle="Name Dialog"
android:dialogMessage="Enter Your Name"
android:key="name"/>
Run Code Online (Sandbox Code Playgroud)
这是我创建的首选项屏幕.我只需要知道如何在主要活动中访问输入的名称"tony".我不知道从对话框中访问该名称的方法.我是否需要添加任何单独的活动来访问名称对话框中的名称.有人可以向我解释一下.


android dialog preferencescreen android-activity edittextpreference
当我单击首选项活动中的EditTextPreference时,我想禁用(不显示)对话框.
当我单击EditTextPreference时,会弹出一个弹出对话框.现在我想禁用它.我尝试设置一个onclicklistener,但对话框显示相同.
public class Settings extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
EditTextPreference userName=(EditTextPreference) findPreference("prefUsername");
userName.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
return false;
}
}); ...
Run Code Online (Sandbox Code Playgroud)
我尝试将此添加到EditTextPreference:android:clickable ="false",但没有.
我希望能够在摘要字段中显示 EditTextPreference 的值。具体来说,我想在 PreferenceFragmentCompat 中执行此操作。
import android.support.v7.preference.PreferenceFragmentCompat;
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences);
}
}
Run Code Online (Sandbox Code Playgroud)
首选项文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
android:defaultValue="DEVICE01"
android:key="device_id"
android:title="Device ID" />
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
我见过其他解决方案,但没有一个包括如何在 PreferenceFragmentCompat 中执行此操作。
android summary edittextpreference android-sharedpreferences
使用Migrate to AndroidX...Android Studio 提供的功能将我的项目迁移到 AndroidX 并相应地更改了我的依赖项以使所有内容都按预期运行后,我遇到了一个无法解决的小问题。
为了在我的应用程序中设置设备编号,我使用了如下定义的 EditTextPreference,pref_screen.xml它在 PreferenceFragmentCompat 类中设置
setPreferencesFromResource(R.xml.pref_screen, string):
<EditTextPreference
android:icon="@drawable/ic_perm_device_information_black_24dp"
android:inputType="number"
android:key="change_device_id"
android:maxLines="1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:summary="@string/settings_device_id"
android:title="@string/pref_title_change_device_id" />
Run Code Online (Sandbox Code Playgroud)
它曾经显示数字键盘来更改值,但在迁移到 AndroidX 后,它继续显示普通键盘,如下图所示。我尝试更改 inputType 并在 xml 中定义小数,但无济于事。迁移到 AndroidX 后是否对键盘的 inputType 设置进行了更改,或者我是否遗漏了一些明显的内容?
android:inputType="numberDecimal"
android:digits="0123456789"
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用AndroidX制作首选项屏幕,但遇到了一个小问题......
当我使用虚拟键盘上的“确定”按钮验证输入时,首选项未验证。(键盘被隐藏了,仅此而已......)
使用 AndroidX,我们无法再覆盖showDialog()...EditTextPreference并且我找不到另一种方法来访问该对话框以将其关闭。
总之,我希望:虚拟键盘上按钮的 DONE 操作验证 AlertDialog。
这是我的示例代码:
XML文件
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
<EditTextPreference
app:key="pref_1"
app:title="Test"
app:useSimpleSummaryProvider="true" />
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
偏好活动
public class MySettingsActivity extends AppCompatActivity implements
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
[...]
public static class HeaderFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.header_preferences, rootKey);
EditTextPreference pref1 = getPreferenceManager().findPreference("pref_1");
pref1.setOnBindEditTextListener(new EditTextPreference.OnBindEditTextListener() {
@Override
public void onBindEditText(@NonNull EditText editText) {
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
}
});
}
}
}
Run Code Online (Sandbox Code Playgroud) android edittextpreference imeoptions appcompatactivity androidx