java 在 Android 中使用千位分隔符 (,) 键入时如何格式化 EditText 的输入?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/28757931/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to format the input of EditText when typing with thousands separators (,) in Android?
提问by mahdi yamani
I've an edittext, it only gets numeric without decimal numbers.
我有一个edittext,它只获取数字而没有十进制数字。
android:inputType="number"
I want to separate thousands while I'm typing . For example 25,000 .
我想在打字时分隔数千个。例如 25,000 。
I know I should use TextWatcherand I've used this code but I couldn't make it work :
我知道我应该使用TextWatcher并且我已经使用了这段代码,但我无法让它工作:
@Override
public void afterTextChanged(Editable viewss) {
String s = null;
try {
// The comma in the format specifier does the trick
s = String.format("%,d", Long.parseLong(viewss.toString()));
} catch (NumberFormatException e) {
}
}
Could you help me to do so ?
你能帮我这样做吗?
回答by Adrian Cid Almaguer
Test this example:
测试这个例子:
import java.text.DecimalFormat;
import java.text.ParseException;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
public class NumberTextWatcher implements TextWatcher {
private DecimalFormat df;
private DecimalFormat dfnd;
private boolean hasFractionalPart;
private EditText et;
public NumberTextWatcher(EditText et)
{
df = new DecimalFormat("#,###.##");
df.setDecimalSeparatorAlwaysShown(true);
dfnd = new DecimalFormat("#,###");
this.et = et;
hasFractionalPart = false;
}
@SuppressWarnings("unused")
private static final String TAG = "NumberTextWatcher";
@Override
public void afterTextChanged(Editable s)
{
et.removeTextChangedListener(this);
try {
int inilen, endlen;
inilen = et.getText().length();
String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), "");
Number n = df.parse(v);
int cp = et.getSelectionStart();
if (hasFractionalPart) {
et.setText(df.format(n));
} else {
et.setText(dfnd.format(n));
}
endlen = et.getText().length();
int sel = (cp + (endlen - inilen));
if (sel > 0 && sel <= et.getText().length()) {
et.setSelection(sel);
} else {
// place cursor at the end?
et.setSelection(et.getText().length() - 1);
}
} catch (NumberFormatException nfe) {
// do nothing?
} catch (ParseException e) {
// do nothing?
}
et.addTextChangedListener(this);
}
@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 (s.toString().contains(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator())))
{
hasFractionalPart = true;
} else {
hasFractionalPart = false;
}
}
}
To use it, add a TextChangedListener to the EditText component.
要使用它,请将 TextChangedListener 添加到 EditText 组件。
editText.addTextChangedListener(new NumberTextWatcher(editText));
回答by TechVINO
add this into your app's Gradle compile 'com.aldoapps:autoformatedittext:0.9.3' in XML xmlns:app="http://schemas.android.com/apk/res-auto"
将此添加到您的应用程序的 Gradle compile 'com.aldoapps:autoformatedittext:0.9.3' in XML xmlns:app="http://schemas.android.com/apk/res-auto"
<com.aldoapps.autoformatedittext.AutoFormatEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:isDecimal="true"
android:maxLength="8"
android:id="@+id/number"/>
This lib automatically add (,) (.)
这个lib自动加(,)(.)
回答by Somnath Lenka
DecimalFormat formatter = new DecimalFormat("#,###,###");
String yourFormattedString = formatter.format(100000);
Use DecimalFormat
使用十进制格式

