Ce l'ho! Ho setacciato internet per sempre e ho messo insieme alcune cose per farlo funzionare. Fondamentalmente ciò che fa è eseguire un processo parallelo che sarà costantemente in esecuzione mentre l'utente si focalizzerà sulla specifica casella di edittext. Imposta un filtro in modo che l'utente possa inserire solo 0-5 nel primo slot intero, ma sarà consentito inserire 0-9 per il secondo. Ovviamente questo darà 0-59 anziché 1-60, ma è quello che vuoi per secondi comunque. Questo codice va prima che il metodo onCreate, all'interno della classe:
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;
}
}
}
}
Poi, all'interno del metodo onCreate
:
Time_sec.setOnFocusChangeListener(new OnFocusChangeListener()
{
public void onFocusChange(View v, boolean hasFocus)
{
new FilterCheckerTask().execute();
if(!hasFocus)
{kicker = !hasFocus;}
}
});
Come ho detto nella prima parte, questo farà in modo che l'utente è possibile inserire solo numeri compresi tra 00 e 59 nella propria casella di modifica.So che può sembrare un po 'trascurato, e può probabilmente essere ripulito un po' in alcune delle istruzioni if, ma per quanto posso dire funziona perfettamente, e non sembra affatto rallentare il sistema. Spero che questo ti aiuti, e in caso contrario, i futuri googler.
fonte
2012-06-13 23:45:38
'android: numerico =" intero "' è molto fine e maneggevole, ma purtroppo è deprecato. – TechNyquist