我有一个带有"text = 0.00"
的EditText
。当我按数字3时,它应该变成0.03
,第二次按数字5时,文本应该是0.35
。以及35.0
,35.09
等这样的文本。这些都使用同一个EditText
来完成。
我应该如何实现这个功能?我尝试使用带有TextWatcher()
的addTextChangedListener()
。
我有一个带有"text = 0.00"
的EditText
。当我按数字3时,它应该变成0.03
,第二次按数字5时,文本应该是0.35
。以及35.0
,35.09
等这样的文本。这些都使用同一个EditText
来完成。
我应该如何实现这个功能?我尝试使用带有TextWatcher()
的addTextChangedListener()
。
你也可以尝试这个:
EditText searchTo = (EditText)findViewById(R.id.medittext);
searchTo.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
doSomething();
}
});
您选择了正确的方法。您需要扩展 TextWatcher 类并重写 afterTextChanged()
,beforeTextChanged()
,onTextChanged()
方法。
您需要在 afterTextChanged()
方法中编写所需功能的逻辑以实现您要求的功能。
afterTextChanged
的文档警告了这种情况,在此回调中对s进行进一步更改是合法的,但要小心不要陷入无限循环,因为您所做的任何更改都会导致该方法递归地再次被调用。所以不要从这里更改s,我想这就是解决方案? - JimLohse这里,我写了一些与您所需的类似的内容:
inputBoxNumberEt.setText(". ");
inputBoxNumberEt.setSelection(inputBoxNumberEt.getText().length());
inputBoxNumberEt.addTextChangedListener(new TextWatcher() {
boolean ignoreChange = false;
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (!ignoreChange) {
String string = s.toString();
string = string.replace(".", "");
string = string.replace(" ", "");
if (string.length() == 0)
string = ". ";
else if (string.length() == 1)
string = ". " + string;
else if (string.length() == 2)
string = "." + string;
else if (string.length() > 2)
string = string.substring(0, string.length() - 2) + "." + string.substring(string.length() - 2, string.length());
ignoreChange = true;
inputBoxNumberEt.setText(string);
inputBoxNumberEt.setSelection(inputBoxNumberEt.getText().length());
ignoreChange = false;
}
}
});
将逻辑放入其中
afterTextChanged(Editable s) {
string str = s.toString()
// use the string str
}
val searchTo : EditText = findViewById(R.id.searchTo)
searchTo.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable) {
// you can call or do what you want with your EditText here
// yourEditText...
}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
})
这是可工作的 Kotlin 版本。
yourEditText.addTextChangedListener(object: TextWatcher {
override fun afterTextChanged(s: Editable?) {
// TODO Auto-generated method stub
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
// TODO Auto-generated method stub
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
doSomething()
}
})