我想知道是否有办法强制执行编辑文字首选项的最小值。
这是我在偏好设置屏幕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" />
答案 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")});