标签: edittextpreference

任何要求 EditTextPreference 值在 Android 中不为空的简单方法?

我有一个数字,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)

android android-2.3-gingerbread edittextpreference

5
推荐指数
1
解决办法
2462
查看次数

自定义 EditTextPreference

我想自定义我的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)

android preferences edittextpreference

5
推荐指数
1
解决办法
6441
查看次数

如何在edittextpreference对话框中设置null验证

如何在edittextpreference对话框中设置null验证,这样如果它为null,则用户不应该单击ok,并且应该在对话框本身中显示一些消息.我一直试图找到它很长一段时间但没有成功......

android preferenceactivity android-alertdialog edittextpreference

5
推荐指数
2
解决办法
2381
查看次数

如何设置 AndroidX 库的 EditTextPreference 的最大长度?

最近,我将我的 android 项目迁移到了 AndroidX,并使用了 AndroidX 库中的 EditTextPreference。现在,我想将 EditTextPreference 的最大长度设置为 50。我尝试使用:

android:maxLength="50"
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

似乎所有 android 命名空间都不适用于 EditTextPreference 并且没有代码建议,所以我找不到任何相关代码来设置最大长度。如何设置最大长度?

android edittextpreference androidx

5
推荐指数
1
解决办法
810
查看次数

EditTextPreference单行

反正是否有一个EditTextPreference单行?我认为默认情况下没有属性,可以做到这一点.有必要重写对象吗?有人这样做过吗?

android android-preferences edittextpreference

3
推荐指数
2
解决办法
1837
查看次数

EditTextPreference.setText(value) 未按预期更新

我试图阻止用户将空字符串输入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

3
推荐指数
1
解决办法
7677
查看次数

在首选项屏幕中从edittext首选项获取值

我是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

3
推荐指数
1
解决办法
2413
查看次数

Android EditTextPreference禁用Dialog

当我单击首选项活动中的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",但没有.

java android edittextpreference

2
推荐指数
2
解决办法
3096
查看次数

汇总显示 EditTextPreference 当前值

我希望能够在摘要字段中显示 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

2
推荐指数
1
解决办法
2380
查看次数

将项目迁移到 androidx 后,EditTextPreference 不显示数字键盘

使用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)

编辑文本首选项键盘

android android-preferences edittextpreference androidx

2
推荐指数
1
解决办法
1603
查看次数

AndroidX:设置 Enter 键以验证 EditTextPreference 对话框

我正在尝试使用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

2
推荐指数
1
解决办法
1151
查看次数