有办法为Android中的EditText定义min和max值吗?

有办法为Android中的EditText定义min和max值吗?

我想为EditText.

例如:如果任何人试图在其中输入一个月值,则该值必须介于1-12之间。

我可以用TextWatcher但我想知道在布局文件或其他地方是否有其他方法可以做到这一点。

编辑:我不想限制字符计数。我想限制价值。例如,如果我限制月份EditText当我输入12个字符时,它会接受它,但是如果我输入了22个字符,它就不能在我进入的时候接受它。


拉风的咖菲猫
浏览 672回答 3
3回答

互换的青春

如果min==3然后输入以1或2开头的任何数字是不可能的(例如:15,23)如果min>=10那就不可能输入任何东西,因为每个数字都必须从1,2,3开始.据我理解,我们无法达到EditText类的简单使用带来的值。InputFilterMinMax,至少对于min值来说不是这样,因为当用户输入一个正数时,这个值就会增加,我们可以很容易地执行一个实时测试,以检查它是否达到了极限,或者超出了范围,并阻止了不符合要求的条目。测试min值是另一回事,因为我们不能确定用户是否已经完成输入,因此无法决定是否应该阻止。这并不是OP所要求的,但为了验证目的,我在我的解决方案中将InputFilter若要测试最大值,请使用OnFocusChangeListener对象时重新测试最小值。EditText如果用户完成了输入,就会失去焦点,如下所示:package&nbsp;test;import&nbsp;android.text.InputFilter;import&nbsp;android.text.Spanned;public&nbsp;class&nbsp;InputFilterMax&nbsp;implements&nbsp;InputFilter&nbsp;{private&nbsp;int&nbsp;max;public&nbsp;InputFilterMax(int&nbsp;max)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;this.max&nbsp;=&nbsp;max;}public&nbsp;InputFilterMax(String&nbsp;max)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;this.max&nbsp;=&nbsp;Integer.parseInt(max);}@Overridepublic&nbsp;CharSequence&nbsp;filter(CharSequence&nbsp;source,&nbsp;int&nbsp;start,&nbsp;int&nbsp;end,&nbsp;Spanned&nbsp;dest,&nbsp;int&nbsp;dstart,&nbsp;int&nbsp;dend)&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;replacement&nbsp;=&nbsp;source.subSequence(start,&nbsp;end).toString();&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;newVal&nbsp;=&nbsp;dest.toString().substring(0,&nbsp;dstart)&nbsp;+&nbsp;replacement&nbsp;+dest.toString().substring(dend,&nbsp;dest.toString().length()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;input&nbsp;=&nbsp;Integer.parseInt(newVal); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(input<=max) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(NumberFormatException&nbsp;nfe)&nbsp;{&nbsp;}&nbsp;&nbsp;&nbsp;//Maybe&nbsp;notify&nbsp;user&nbsp;that&nbsp;the&nbsp;value&nbsp;is&nbsp;not&nbsp;good&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;"";}}和OnFocusChangeListenerMinpackage&nbsp;test;import&nbsp;android.text.TextUtils;import&nbsp;android.view.View;import&nbsp;android.view.View.OnFocusChangeListener;public&nbsp;class&nbsp;OnFocusChangeListenerMin&nbsp;implements&nbsp;OnFocusChangeListener&nbsp;{private&nbsp;int&nbsp;min;public&nbsp;OnFocusChangeListenerMin(int&nbsp;min)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;this.min&nbsp;=&nbsp;min;}public&nbsp;OnFocusChangeListenerMin(String&nbsp;min)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;this.min&nbsp;=&nbsp;Integer.parseInt(min);}@Overridepublic&nbsp;void&nbsp;onFocusChange(View&nbsp;v,&nbsp;boolean&nbsp;hasFocus)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if(!hasFocus)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;val&nbsp;=&nbsp;((EditText)v).getText().toString(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!TextUtils.isEmpty(val)){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Integer.valueOf(val)<min){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Notify&nbsp;user&nbsp;that&nbsp;the&nbsp;value&nbsp;is&nbsp;not&nbsp;good &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}}然后在活动中设置InputFilterMax而OnFocusChangeListenerMin到EditText注意:您可以在onFocusChangeListener.mQteEditText.setOnFocusChangeListener(&nbsp;new&nbsp;OnFocusChangeListenerMin('20');mQteEditText.setFilters(new&nbsp;InputFilter[]{new&nbsp;InputFilterMax(getActivity(),'50')});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android