本文介绍了如何与千位分隔符(,)在Android中打字的时候格式化的EditText的输入?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个的EditText
,它只是没有十进制数得到的数值。
的android:inputType下=数字
我想在我打字分隔千。例如25000人。
我知道我应该使用 TextWatcher
键,我用这个code,但我不能让它工作:
@覆盖
公共无效afterTextChanged(编辑viewss){
字符串s = NULL;
尝试{
//格式说明逗号的伎俩
S =的String.format(%,D,的Long.parseLong(viewss.toString()));
}赶上(NumberFormatException的E){
} }
您能帮我做到这一点?
解决方案
测试这个例子:
进口java.text.DecimalFormat中;
进口java.text.ParseException;进口android.text.Editable;
进口android.text.TextWatcher;
进口android.widget.EditText;公共类NumberTextWatcher实现TextWatcher { 私人DecimalFormat的DF;
私人DecimalFormat的dfnd;
私人布尔hasFractionalPart; 私人的EditText等; 公共NumberTextWatcher(的EditText等)
{
DF =新的DecimalFormat(#,###。##。);
df.setDecimalSeparatorAlwaysShown(真);
dfnd =新的DecimalFormat(####);
this.et =等;
hasFractionalPart = FALSE;
} @燮pressWarnings(未使用)
私有静态最后弦乐TAG =NumberTextWatcher; @覆盖
公共无效afterTextChanged(编辑S)
{
et.removeTextChangedListener(本); 尝试{
INT inilen,endlen;
。inilen = et.getText()长(); 串V = s.toString()取代(将String.valueOf(df.getDecimalFormatSymbols()getGroupingSeparator()),);
数n = df.parse(V);
INT CP = et.getSelectionStart();
如果(hasFractionalPart){
et.setText(df.format(正));
}其他{
et.setText(dfnd.format(正));
}
。endlen = et.getText()长();
INT SEL =(CP +(endlen - inilen));
如果(SEL大于0&放大器;&放大器; SEL&下; = et.getText()长度()){
et.setSelection(SEL);
}其他{
//把光标在结束了吗?
et.setSelection(et.getText()长() - 1);
}
}赶上(NumberFormatException的NFE){
// 没做什么?
}赶上(ParseException的E){
// 没做什么?
} et.addTextChangedListener(本);
} @覆盖
公共无效beforeTextChanged(CharSequence中,诠释开始,诠释计数后INT)
{
} @覆盖
公共无效onTextChanged(CharSequence中,诠释开始,诠释之前,诠释计数)
{
如果(s.toString()。包含(将String.valueOf(df.getDecimalFormatSymbols()。getDecimalSeparator())))
{
hasFractionalPart = TRUE;
}其他{
hasFractionalPart = FALSE;
}
}}
editText.addTextChangedListener(new NumberTextWatcher(editText));
这篇关于如何与千位分隔符(,)在Android中打字的时候格式化的EditText的输入?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!