您好,EditText
與「文本= 0.00」。當我按數字3它應該是0.03 &第二次當我按數字5文本應該是0.35。和35.0,35.09一樣。 EditText
最初的值爲0.00。如何在按下數字時使用EditText onTextChanged事件?
這些都是用相同的EditText
完成的。
我該如何做到這一點?我曾嘗試addTextChangedListener()
與TextWatcher()
。
您好,EditText
與「文本= 0.00」。當我按數字3它應該是0.03 &第二次當我按數字5文本應該是0.35。和35.0,35.09一樣。 EditText
最初的值爲0.00。如何在按下數字時使用EditText onTextChanged事件?
這些都是用相同的EditText
完成的。
我該如何做到這一點?我曾嘗試addTextChangedListener()
與TextWatcher()
。
您已選擇正確的方法。您必須使用TextWatcher擴展課程並覆蓋afterTextChanged()
,beforeTextChanged()
,onTextChanged()
。
您必須在afterTextChanged()
方法中編寫您所需的邏輯來實現您所需的功能。
當我做setText()時,再次調用afterTextChanged,如何防止? – usman
你也可以試試這個:
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();
}
});
當我做setText()再次調用onTextChanged,如何防止? – usman
您無法防止在setText事件上調用onTextChanged。你必須自己去做,比如在設置文本之前使用一些布爾值設置爲true,並在ontextchanged上檢查布爾值,並決定是否繼續進行onTextChanged事件。另外一個解決方案是在設置文本之前刪除TextChangeListener並在設置文本後再次設置。 –
是的,你不能阻止。如果您需要知道修改的位置,Google建議使用[setSpan](https://developer.android.com/reference/android/text/Spannable.html)方法 –
在這裏,我寫了類似於u需要的東西:
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;
}
}
});
Shoule將邏輯放入「afterTextChanged」中。有關「onTextChanged」的文檔 - 「嘗試從此回調中更改s是錯誤的」 – giulio
ü可以給我烏爾解決方案嗎?我需要完全相同的東西 – usman