EditText范围内的值

我想input1-60的范围内的值。 EditText不应该接受像61,62 …或0,-1,-2等值

我们怎样才能给范围1-60在android中的EditText ? 我已经在main.xml中完成了

  <EditText android:layout_height="wrap_content" android:id="@+id/editText1" android:layout_width="160dip" android:inputType="number"> </EditText> 

Solutions Collecting From Web of "EditText范围内的值"

您可以将一个TextWatcher分配给您的EditText并监听那里的文本更改,例如:

 public void afterTextChanged(Editable s) { try { int val = Integer.parseInt(s.toString()); if(val > 60) { s.replace(0, s.length(), "60", 0, 2); } else if(val < 1) { s.replace(0, s.length(), "1", 0, 1); } } catch (NumberFormatException ex) { // Do something } } 

正如Devunwired所提到的,注意调用s.replace()将recursion地调用TextWatcher。

通常情况下,通过检查布尔“编辑”标志来封装这些更改,以便recursion调用跳过,并简单地返回,而从内部进行更改。

我在这里遇到了一个很好的解决scheme:

 public 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; } } 

只需将此filter应用于编辑文本,如下所示:

 mCentsEditText = (EditText)v.findViewById(R.id.cents_edit_text); InputFilterMinMax filter = new InputFilterMinMax("0", "99") {}; mCentsEditText.setFilters(new InputFilter[]{filter}); 

为什么不使用Seekbar而不是EditText? 这样,只有数字可以input,并且可以根据需要指定/修改最大限制。

 public class SeekBar1 extends Activity implements SeekBar.OnSeekBarChangeListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); .. mSeekBar = (SeekBar)findViewById(R.id.seekBar); mSeekBar.setOnSeekBarChangeListener(this); .. } public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) { //Do your Changes Here } public void onStartTrackingTouch(SeekBar seekBar) { //On First Track Touch } public void onStopTrackingTouch(SeekBar seekBar) { //On Stop Track Touch } } 

对于数字inputtypes值,Seekbar是最好的UI。 尽pipe如此,其精度还是有问题的。

尝试这个..

  EditText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { //add your condtion here. return false; } }); 

非常有趣的问题。

我想最好的方法是实现一个新的inputType ,但setInputType方法接收一个int。 没有做什么:(

在这种方法doc它说:

使用为inputType定义的常量设置内容的types。 这将负责通过调用setKeyListener(KeyListener)来更改关键侦听器,以匹配给定的内容types。

非常好,你可以用keyListener提供一个keyListener

您可以扩展android.text.method.DigitsKeyListener来创build新的keyListener ,避免了keyListener的问题。

我没有足够的权限来评论Ashok Felix的答案,但我想补充一点,我已经发现一些代码premitting在偏好显示一个SeekBar。

这是非常容易使用(我不是作者)。 请参阅Matthew Wiggins的SeekBarPreference代码: http : //android.hlidskialf.com/blog/code/android-seekbar-preference

这工作,但没有生活。

 editText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { try { int val = Integer.parseInt(editText.getText() .toString()); if (val > 2000) { editText.setText(""); } else if (val < 100) { editText.setText(""); } } catch (NumberFormatException ex) { } } });