我按下数字时如何使用EditText onTextChanged事件?

我有一个addTextChangedListener()和TextWatcher()。当我按数字3时,它应该像0.03,第二次按数字5时,文本应该是2961026798634664664963。35.0、35.09这样。 EditText的初始值为0.00。

这些都是使用相同的addTextChangedListener()完成的。

我该如何实现? 我尝试将addTextChangedListener()与TextWatcher()结合使用。

4个解决方案

92 votes

您也可以尝试以下操作:

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();

}

});

Khawar Raza answered 2020-07-11T00:51:47Z

36 votes

您选择了正确的方法。 您必须使用TextWatcher扩展该类,并覆盖afterTextChanged(),beforeTextChanged()、onTextChanged()。

您必须使用afterTextChanged()方法编写所需的逻辑,才能实现所需的功能。

Roll no1 answered 2020-07-11T00:51:27Z

8 votes

在这里,我写了一些与你需要的东西类似的东西:

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;

}

}

});

M. Usman Khan answered 2020-07-11T00:52:07Z

1 votes

把逻辑放在

afterTextChanged(Editable s) {

string str = s.toString()

// use the string str

}

TextWatcher上的文档

Dan Alboteanu answered 2020-07-11T00:52:31Z

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐