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 TextWatcher
and 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
使用十进制格式