设置android编辑文本首选项的最小值和最大值

时间:2014-01-05 02:31:14

标签: android user-interface

我想知道是否有办法强制执行编辑文字首选项的最小值。

这是我在偏好设置屏幕xml文件中的EditTextPreference的节点:

    <EditTextPreference
    android:id="@+id/txt_slideshow_speed"
    android:key="@string/prefSlideShowSpeedKey"
    android:persistent="true"
    android:inputType="number"
    android:max="3600"
    android:dialogTitle="Slideshow Speed (seconds)"
    android:defaultValue="@string/defaultSlideShowSpeedValue"
    android:title="Slideshow Speed" />

3 个答案:

答案 0 :(得分:1)

首先,您需要通过getEditText()以编程方式获取EditText。然后,查看此link以在EditText上设置输入过滤器。

答案 1 :(得分:0)

您可以查看EditText here的完整文档。

我无法找到描述最小值的属性。

如果必须,可以通过分配onTextChange Listener并验证输入来以编程方式执行此操作。

 EditText text = (EditText)findViewById(R.id.medittext);
    text.addTextChangedListener(new TextWatcher() {
    @Override
    public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            // TODO Auto-generated method stub

        }

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

            //Validate input to make sure that it fits your requirements




        } 

    });  

答案 2 :(得分:0)

首先,您需要创建一个InputFilter类,该类将限制用户输入不在范围内的值。

Public class InputFilterText implements InputFilter {

    private int min, max;

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

    public InputFilterText (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) {
            nfe.printStackTrace();
        }
        return "";
    }

    private boolean isInRange(int a, int b, int c) {
        return b > a ? c >= a && c <= b : c >= b && c <= a;
    }
}

然后在PreferenceFragment中的onCreate()中使用此

EditTextPreference editTextPreference = (EditTextPreference) this.findPreference(getString(R.string.EditTextNumberKey));
editTextPreference.getEditText().setFilters(new InputFilter[]{new InputFilterText ("1", "1000")});
相关问题