我想控制只接受int值的EditText
。用户输入数字,然后我将添加字符串(简单部分(。但我想在用户输入数字时动态更改它。我怎样才能做到这一点?
我可以这样做:
用户写入61,EditText
输出为:61分钟。
使用者写入1314,则EditText
输出为:13分钟14秒。
问题是:
如果用户写入7699,则预期EditText
输出为:76分59秒。
我想我需要一个类似ArrayAdapter
的getView()
方法的控制器。如果用户写1361,那么我必须对手机说不要打印"13分61秒",只需在EditText
中打印"13分钟59秒"。但我不知道怎么做。
我尝试过的解决方案:当在其中输入所需格式的文本时,如何停止编辑文本以添加文本?
任何帮助都会得到通知。
为了只允许数值,您可以在EditText XML文件中使用android:inputType="number"
为了跟踪EditText
中写入的值,可以使用addTextChangedListener
方法和TextWatcher
接口来侦听EditText
的变化
Timer timer = new Timer();
final long DELAY = 2000; // in ms
field1 = (EditText)findViewById(R.id.field1);
field1.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(final Editable s) {
// Do whatever you want with the updated value
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
// TODO: do what you need here
// you will probably need to use
// runOnUiThread(Runnable action) for some specific
// actions
runOnUiThread(new Runnable() {
@Override
public void run() {
String minsString = "";
String secsString = "";
switch (s.length()) {
case 1:
if (Integer.parseInt(String.valueOf(s)) == 0 || Integer.parseInt(String.valueOf(s)) == 1) {
field1.setText(s + " min");
} else {
field1.setText(s + " mins");
}
break;
case 2:
field1.setText(s + " mins");
break;
case 3:
minsString = s.toString().substring(0, 2);
secsString = s.toString().substring(2);
if (Integer.parseInt(secsString) > 59) {
secsString = "59";
}
field1.setText(minsString + " mins " + secsString + " secs");
break;
case 4:
minsString = s.toString().substring(0, 2);
secsString = s.toString().substring(2);
if (Integer.parseInt(secsString) > 59) {
secsString = "59";
}
field1.setText(minsString + " mins " + secsString + " secs");
break;
default:
break;
}
}
});
}
}, DELAY);
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (timer != null)
timer.cancel();
}
});
引用定时器解决方案阻止编辑文本的实例更新
DateUtils
中有一个函数可以使用,只需要给它一个Long
。
/**
* Formats an elapsed time in the form "MM:SS" or "H:MM:SS"
* for display on the call-in-progress screen.
* @param elapsedSeconds the elapsed time in seconds.
*/
public static String formatElapsedTime(long elapsedSeconds) {
return formatElapsedTime(null, elapsedSeconds);
}
使用它真的很容易,DateUtils.formatElapsedTime(time)
,它会用MM:SS
格式化的字符串打印你的时间