首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将EditTextPreference限制在1024:65535范围内

如何将EditTextPreference限制在1024:65535范围内
EN

Stack Overflow用户
提问于 2014-08-06 17:01:21
回答 3查看 3.3K关注 0票数 5

我有一个EditTextPreference定义为:

代码语言:javascript
运行
复制
<EditTextPreference 
android:defaultValue="8888" 
android:key="someKey" 
android:title="SomeString"
android:inputType="number"    
>

EditTextPreference在内部使用EditText,这可以通过EditTextPreference.getEditText()获得。

我想把用户输入的数字限制在1024到65535之间的整数范围内。我怎么能这么做?

我试图同时使用InputFilter和TextWatcher,但没有成功。

有什么想法吗?

正如您可能已经猜到的,我正在尝试验证输入一个网络端口。也许我应该用其他类型的输入来解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-06 17:21:26

您可以使用EditText来完成这个任务,但是使用NumberPicker要容易得多。

它为您想要的东西定义了预定义的方法:setMinValue(int)setMaxValue(int)

寻找灵感:

代码语言:javascript
运行
复制
import android.content.Context;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.NumberPicker;

/*
 * Add this to your XML resource.
 */
public class NumberPickerPreference extends DialogPreference {

    private NumberPicker numberPicker;

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

    @Override
    protected View onCreateDialogView() {
        return generateNumberPicker();
    }

    public NumberPicker generateNumberPicker() {
        numberPicker = new NumberPicker(getContext());
        numberPicker.setMinValue(1025);
        numberPicker.setMaxValue(65535);
        numberPicker.setValue(1025);

        /*
         * Anything else you want to add to this.
         */

        return numberPicker;
    }

    @Override
    protected void onDialogClosed(boolean positiveResult) {
        super.onDialogClosed(positiveResult);
        if (positiveResult) {
            int port = numberPicker.getValue();
            Log.d("NumberPickerPreference", "NumberPickerValue : " + port);
        }
    }

}
票数 3
EN

Stack Overflow用户

发布于 2015-05-25 09:09:36

您可以使用我的自定义NumberPickerPreference.java

代码语言:javascript
运行
复制
public class NumberPickerPreference extends DialogPreference {
    private NumberPicker mPicker;
    private int mNumber = 1024;

    public NumberPickerPreference(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public NumberPickerPreference(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setPositiveButtonText(android.R.string.ok);
        setNegativeButtonText(android.R.string.cancel);
    }

    @Override
    protected View onCreateDialogView() {
        mPicker = new NumberPicker(getContext());
        mPicker.setMinValue(1024);
        mPicker.setMaxValue(2048);
        mPicker.setValue(mNumber);
        return mPicker;
    }

    @Override
    protected void onDialogClosed(boolean positiveResult) {
        if (positiveResult) {
            mPicker.clearFocus();
            setValue(mPicker.getValue());
        }
    }   

    @Override
    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
        setValue(restoreValue ? getPersistedInt(mNumber) : (Integer) defaultValue);
    }

    public void setValue(int value) {
        if (shouldPersist()) {
            persistInt(value);
        }

        if (value != mNumber) {
            mNumber = value;
            notifyChanged();
        }
    }

    @Override
    protected Object onGetDefaultValue(TypedArray a, int index) {
        return a.getInt(index, 0);
    }
}

下面是使用它的完整的示例应用程序

端口号将作为整数保存。

票数 1
EN

Stack Overflow用户

发布于 2016-12-27 15:17:28

完整的答案在这里。

代码语言:javascript
运行
复制
public boolean onPreferenceChange(Preference preference, Object value) { 

.
.
.
//other default items
.
.
.

EditTextPreference editTextPreference=(EditTextPreference) findPreference("someKey");
            editTextPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(Preference preference, Object newValue) {
                    int val = Integer.parseInt(newValue.toString());
                    if ((val > 1024) && (val < 65355)) {
                        Log.d("Preference ","Value saved: " + val);
                        preference.setSummary(""+val);
                        return true;
                    }
                    else {
                        // invalid you can show invalid message
                        Toast.makeText(getActivity(), "Choose something between 3 and 25", Toast.LENGTH_LONG).show();
                        return false;
                    }
                }
            });

}

在您的设置活动中,查找onPrerenceChange方法并插入我前面给出的代码块。对我来说很管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25166068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档