如何控制EditText?
How to control EditText?
我想控制只接受 int 值的 EditText
。用户输入数字然后我将添加字符串(简单部分)。但我想在用户输入数字时动态更改它。我怎样才能做到这一点?
我可以做到这些:
用户写入 61,EditText
输出为:61 min.
用户写入 1314,则 EditText
输出为:13 分 14 秒。
这是问题所在:
如果用户写入 7699,预期的 EditText
输出将是:76 分 59 秒。
我想我需要一个类似 ArrayAdapter
的 getView()
方法的控制器。如果用户写 1361 那么我不得不对 phone 说不要打印“13 分 61 秒”,只在 EditText
中打印“13 分 59 秒”。但我不知道如何。
我试过的解决方法:
我们将不胜感激。
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
格式的字符串打印您的时间
如果只允许数值,您可以在 EditText XML 文件中使用 android:inputType="number"
跟踪写入EditText
的值,可以使用addTextChangedListener
方法监听EditText
的变化,TextWatcher
接口
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();
}
});
参考计时器solution以防止编辑文本的实例更新
我想控制只接受 int 值的 EditText
。用户输入数字然后我将添加字符串(简单部分)。但我想在用户输入数字时动态更改它。我怎样才能做到这一点?
我可以做到这些:
用户写入 61,EditText
输出为:61 min.
用户写入 1314,则 EditText
输出为:13 分 14 秒。
这是问题所在:
如果用户写入 7699,预期的 EditText
输出将是:76 分 59 秒。
我想我需要一个类似 ArrayAdapter
的 getView()
方法的控制器。如果用户写 1361 那么我不得不对 phone 说不要打印“13 分 61 秒”,只在 EditText
中打印“13 分 59 秒”。但我不知道如何。
我试过的解决方法:
我们将不胜感激。
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
如果只允许数值,您可以在 EditText XML 文件中使用 android:inputType="number"
跟踪写入EditText
的值,可以使用addTextChangedListener
方法监听EditText
的变化,TextWatcher
接口
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();
}
});
参考计时器solution以防止编辑文本的实例更新