Android 如何创建只接受预定义范围值的EditTextPreference?

Android 如何创建只接受预定义范围值的EditTextPreference?,android,Android,我希望EditTextPreference只接受6000到65536之间的值,我该怎么办?谢谢 顺便说一句,代码A不起作用,我不能在EditTextPreference的编辑框中输入任何数字,其中的键是“WebServerPort” 代码A public class UIPreference extends PreferenceActivity { private AdView adView; @Override protected void onCreate(Bu

我希望EditTextPreference只接受6000到65536之间的值,我该怎么办?谢谢

顺便说一句,代码A不起作用,我不能在EditTextPreference的编辑框中输入任何数字,其中的键是“WebServerPort”


代码A

public class UIPreference extends PreferenceActivity {
    private AdView adView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.mypreference);
        setContentView(R.layout.layout_preference);


        EditTextPreference edit_Pref = (EditTextPreference) getPreferenceScreen().findPreference("WebServerPort");
        edit_Pref.getEditText().setFilters(new InputFilter[]{ new InputFilterMinMax("6000", "65536")});
    }
}


class InputFilterMinMax implements InputFilter {

    private int min, max;

    public InputFilterMinMax(int min, int max) {
        this.min = min;
        this.max = max;
    }

    public InputFilterMinMax(String min, String max) {
        this.min = Integer.parseInt(min);
        this.max = Integer.parseInt(max);
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        try {
            int input = Integer.parseInt(dest.toString() + source.toString());
            if (isInRange(min, max, input))
                return null;
        } catch (NumberFormatException nfe) { }
        return "";
    }

    private boolean isInRange(int a, int b, int c) {
        return b > a ? c >= a && c <= b : c >= b && c <= a;
    }
}
公共类UIPreference扩展了PreferenceActivity{
私人咨询咨询;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.mypreference);
setContentView(R.layout.layout_首选项);
EditTextPreference编辑_Pref=(EditTextPreference)getPreferenceScreen().FindReference(“WebServerPort”);
编辑_Pref.getEditText().setFilters(新的InputFilter[]{new InputFilterMinMax(“6000”,“65536”)});
}
}
类InputFilterMax实现InputFilter{
私有整数最小值,最大值;
公共InputFilterMinMax(最小整数,最大整数){
this.min=min;
this.max=max;
}
公共InputFilterMinMax(字符串最小值、字符串最大值){
this.min=整数.parseInt(min);
this.max=Integer.parseInt(max);
}
@凌驾
公共CharSequence筛选器(CharSequence源、int开始、int结束、跨区目标、int开始、int结束){
试一试{
int input=Integer.parseInt(dest.toString()+source.toString());
if(isInRange(最小、最大、输入))
返回null;
}catch(NumberFormatException nfe){}
返回“”;
}
私有布尔值isInRange(int a、int b、int c){

返回b>a?c>=a&&c=b&&c尝试在editTextPreference.getEditText()上添加
InputFilter

InputFilter过滤器=新的InputFilter(){
公共CharSequence筛选器(CharSequence源、int开始、int结束、跨区目标、int开始、int结束){
整数=0;
试一试{
number=Integer.parseInt(source.toString());
}捕获(例外e){
}
如果(数量>6000&&数量<65536){
返回源;
}
返回null;
}
};
editTextPreference.getEditText().setFilters(新的InputFilter[]{filter});

您可以为EditText指定一个TextWatcher,并在其中侦听文本更改,例如:

editTextPreference.getEditText().addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            try {
                long val = Long.parseLong(s.toString());
                if(val > 65536) {
                     s.replace(0, s.length(), "65536", 0, 5);
                } else if(val < 6000) {
                     s.replace(0, s.length(), "6000", 0, 4);
                }
            } catch (NumberFormatException ex) {
                 // Do something
            }
      }
});
editTextPreference.getEditText().addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
}
@凌驾
公共无效后文本已更改(可编辑){
试一试{
long val=long.parseLong(s.toString());
如果(val>65536){
s、 替换(0,s.长度(),“65536”,0,5);
}否则如果(val<6000){
s、 替换(0,s.长度(),“6000”,0,4);
}
}捕获(NumberFormatException ex){
//做点什么
}
}
});
参考此链接“”。它将帮助您。谢谢!但是代码A(我在问题中添加了它)不起作用,我无法在EditTextPreference的编辑框中输入任何数字
InputFilter filter = new InputFilter() {
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            int number = 0;

            try {
                number = Integer.parseInt(source.toString());
            } catch (Exception e) {
            }
            if(number > 6000 && number < 65536) {
                return source;
            }
            return null;
        }
    };
    editTextPreference.getEditText().setFilters(new InputFilter[] { filter });
editTextPreference.getEditText().addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            try {
                long val = Long.parseLong(s.toString());
                if(val > 65536) {
                     s.replace(0, s.length(), "65536", 0, 5);
                } else if(val < 6000) {
                     s.replace(0, s.length(), "6000", 0, 4);
                }
            } catch (NumberFormatException ex) {
                 // Do something
            }
      }
});