我搞定了!我在网上搜索了很久,综合了一些东西才让它正常工作。
基本上它运行一个并行进程,当用户将焦点放在特定的编辑框上时,它将不断运行。它将设置一个过滤器,以便用户只能在第一个整数槽中输入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;}
}
});
正如我在第一部分中所说的,这将使用户只能在您的编辑框中输入00到59之间的数字。我知道它看起来可能有点凌乱,在某些if语句中可能需要进行一些清理,但据我所知,它完美地工作,并且似乎不会减慢系统速度。希望这可以帮助您,如果不能,请留给未来的谷歌搜索者。
android:numeric="integer"
非常好用,但不幸的是它已经被弃用了。 - Niki Romagnoli