私はそれを持っています!私はインターネットを永遠に精査し、いくつかのことを一緒にして働かせました。 基本的には、ユーザーが特定の編集ボックスに専念している間、常に実行される並列プロセスが実行されます。ユーザが最初の整数スロットに0-5を入力するだけで、2番目の整数スロットには0-9を入力できるようにフィルタを設定します。これは明らかに1-60の代わりに0-59を与えますが、それはあなたが何秒でも望むものです。 このコードは、クラスの内部で、の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ステートメントで少しきれいにすることができますが、私はそれが絶対に完全に動作すると言うことができる限り、システムをまったく遅くしないようです。これが将来のグーグル・グーグルに役立つことを願っています。
'android:numeric =" integer "'は非常に細かく便利ですが、悲しいかなか非難されています。 – TechNyquist