在我的应用程序中,用户可以在文本字段中输入美元金额。问题是,当他们输入数字时,我需要输入以适应最终数字,而无需实际输入小数点。解释这一点的最好方法是举个例子:
假设用户从一个包含以下内容的 EditText 字段开始:
.
用户想要在字段中输入 $12.53(即数字 1、2、5、3)。然后他/她从输入 1 开始,该字段应如下所示:
.1
然后:
.12
下一个:
1.25
最后:
12.53
因此,您可能会注意到,当输入数字时,小数点会相应地放置。在输入数字时是否可以这样做?谢谢。
在我的应用程序中,用户可以在文本字段中输入美元金额。问题是,当他们输入数字时,我需要输入以适应最终数字,而无需实际输入小数点。解释这一点的最好方法是举个例子:
假设用户从一个包含以下内容的 EditText 字段开始:
.
用户想要在字段中输入 $12.53(即数字 1、2、5、3)。然后他/她从输入 1 开始,该字段应如下所示:
.1
然后:
.12
下一个:
1.25
最后:
12.53
因此,您可能会注意到,当输入数字时,小数点会相应地放置。在输入数字时是否可以这样做?谢谢。
"$"是的,这很有可能,即使您不必decimal单独管理。
下面很简单EditText,由TextWatcher:
final EditText editText = (EditText) findViewById(R.id.edt);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
if (editText == null) return;
String inputString = editable.toString();
editText.removeTextChangedListener(this);
String cleanString = inputString.toString().replaceAll("[$,.]", "");
BigDecimal bigDecimal = new BigDecimal(cleanString).setScale(2, BigDecimal.ROUND_FLOOR).divide(new BigDecimal(100), BigDecimal.ROUND_FLOOR);
String converted = NumberFormat.getCurrencyInstance().format(bigDecimal);
editText.setText(converted);
editText.setSelection(converted.length());
editText.addTextChangedListener(this);
}
});
如果你需要知道EditText应该如何创建xml,有这个:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edt"
android:inputType="numberDecimal"
android:textDirection="anyRtl"
android:gravity="right"/>
这是一个老问题,但也许最好回答一下:)