gpt4 book ai didi

java - 实时格式化 Android EditText 时如何避免 StackOverflow?

转载 作者:行者123 更新时间:2023-11-29 08:55:38 27 4
gpt4 key购买 nike

在我的 Android 应用程序中,我有一个 EditText,用户可以在其中输入金额。当 EditText 失去焦点时,我使用 NumberFormat 将输入的金额格式化为货币 Locale,当用户单击 edittext 时,它再次获取原始字符串并输入该字符串 ( code here)。

这工作正常,但当用户输入金额时它看起来并不漂亮。理想情况下,我希望 EditText 还显示以下内容(按重要性排序):

  1. 金额左侧的货币符号。
  2. 本地化的千位分隔符。
  3. 仅当用户输入时才显示小数点。

然而,我遇到的第一个问题是,当我使用 TextWatcher 并实现类似于下面的代码 fragment 的东西时,我得到了一个(非常适合这个网站的)StackOverflowException,因为它随后会观察自己的变化。

@Override
public void afterTextChanged(Editable s) {
amount_field.setText("€" + s.toString());
}

那么我的问题是:如何实时格式化 EditText?欢迎所有提示!

最佳答案

尝试按以下方式在 OnFocusChangeListener 上使用:

<EDIT-TEXT>.setOnFocusChangeListener(new OnFocusChangeListener() {

@Override
public void onFocusChange(View arg0, boolean arg1) {
if(!arg1){//it means focus is shifted
amount_field.setText("€" + s.toString());
}

}
});

尝试做这样的事情:

String lastText="";
@Override
public void afterTextChanged(Editable s) {
if(!lastText.equals(s.toString())){
String str=s.toString();
str = str.replaceAll("\\D+", "");
Locale dutch = new Locale("nl", "NL");
NumberFormat numberFormatDutch = NumberFormat.getCurrencyInstance(dutch);
String formattedAmount = numberFormatDutch.format(new BigDecimal(str));
formattedAmount ="€" + formattedAmount;
lastText=formattedAmount;
amount_test.setText(formattedAmount);
}
}

关于java - 实时格式化 Android EditText 时如何避免 StackOverflow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20419790/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com