我正在尝试对edittext应用某种验证。用户应该只能输入1到60之间的整数。我想知道是否应该让他们输入他们喜欢的内容,当他们关注edittext检查内容时,如果超出界限则将值更改为默认值,说0。
或者有没有办法将键盘限制为仅允许整数?
更新: 我正在以编程方式做所有事情。到目前为止,我已经能够限制只有数字输入,并通过实现以下最多2个字符。我仍然在努力限制0到60之间的值。
editText.setInputType( InputType.TYPE_CLASS_NUMBER );
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(2);
editText.setFilters(FilterArray);
答案 0 :(得分:2)
您可以使用android.text.method.KeyListener
将当前输入替换为您喜欢的任何内容。
由于您无需更改所有密钥,因此您可以使用addTextChangedListener(TextWatcher watcher)
方法:
EditText editT = (EditText) findViewById(R.id.your_id);
editT.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) {
// TODO Auto-generated method stub
});
利用它来检查你的输入是否超出了你所看到的范围,你甚至可以通过检查该循环来忽略这些键。
在XML中:
android:inputType="number"
。 android:maxLength="2"
。答案 1 :(得分:1)
如果仅限于数字,则可以使用
EditText.addTextChangedListener
获取输入的值并验证它不超过60
您可以通过添加轻松地仅允许数字
android:numeric="integer"
到布局xml文件中的EditText
虽然值得一提的是android:numeric="integer"
现已弃用
答案 2 :(得分:1)
我知道了!我永远地搜索了互联网,并把一些东西放在一起让它发挥作用。 基本上它所做的是运行一个并行进程,当用户专注于特定的edittext框时,该进程将持续运行。它将设置一个过滤器,以便用户只能在第一个整数槽中输入0-5,但允许第二个输入0-9。这显然会给0-59而不是1-60,但这就是你想要的秒数。 此代码位于类内部的onCreate方法之前:
final InputFilter filter = new InputFilter()
{
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dent)
{
for (int i = start; i < end; i++)
{
if ((source.charAt(start) == "6".charAt(0)) || (source.charAt(start) == "7".charAt(0)) || (source.charAt(start) == "8".charAt(0))
|| (source.charAt(start) == "9".charAt(0)) || (!Character.isDefined(source.charAt(i))) )
{
return "";
}
}
return null;
}
};
private class FilterCheckerTask extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackground(Void... params)
{
while(true)
{
if (<EditText>.getText().toString().isEmpty())
{
Log.e("empty","empty");
<EditText>.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(2)});
}
else if (<EditText>.getText().toString().charAt(0) >= "6".charAt(0))
{
Log.e("front num bad","greater than 5");
<EditText>.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(2)});
}
else
{
Log.e("unfiltered", "unfiltered");
<EditText>.setFilters(new InputFilter[]{new InputFilter.LengthFilter(2)});
}
if (kicker)
{
return null;
}
}
}
}
然后,在onCreate
方法中:
Time_sec.setOnFocusChangeListener(new OnFocusChangeListener()
{
public void onFocusChange(View v, boolean hasFocus)
{
new FilterCheckerTask().execute();
if(!hasFocus)
{kicker = !hasFocus;}
}
});
正如我在第一部分中所说,这将使得用户只能在您的edittext框中输入00到59之间的数字。我知道它可能看起来有点草率,它可能会在一些if语句中清理一下,但据我所知,它的工作绝对完美,并且似乎根本不会减慢系统的速度。希望这有助于你,如果没有,未来的googlers。