Android EditText 中文本更改时自动添加千位分隔符

Posted

技术标签:

【中文标题】Android EditText 中文本更改时自动添加千位分隔符【英文标题】:Add Thousand Separators Automatically While Text Changes in Android EditText 【发布时间】:2016-04-09 00:49:24 【问题描述】:

对于我想要完成的同一任务,有很多答案,甚至我找不到任何对我有用的解决方案

我见过

Question 1 -- 问题是添加逗号计数“。” (DOT) 也可以作为数值。

Question 2 -- 问题是在更改文本时没有显示结果

Question 3 -- 问题是第15个字母后连续加0。

还有更多问题和答案

但我没有找到任何符合千位分隔符一般要求的东西。

是否有任何有用的提示可以帮助我在文本更改时顺利添加千位分隔符并区别对待 小数后的数字就像计算器一样?

我将不胜感激。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,为了得到正确的结果,我做了很多研究。所以我终于解决了我们正在搜索的问题,我为您提供了我的代码,这些代码将帮助您并满足您的要求。

你可以直接在你自己的课上复制我的代码,已经完全测试过了

以下代码的特征

将千位分隔符作为EditText内的文本更改。

加 0。按句点 (.) 时自动加 0。

在开始时忽略 0 输入。

类名:NumberTextWatcherForThousand,实现TextWatcher

import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import java.util.StringTokenizer;

/**
 * Created by Shreekrishna on 12/14/2014.
 */
public class NumberTextWatcherForThousand implements TextWatcher 

    EditText editText;


    public NumberTextWatcherForThousand(EditText editText) 
        this.editText = editText;


    

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) 

    

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) 

    

    @Override
    public void afterTextChanged(Editable s) 
        try
        
            editText.removeTextChangedListener(this);
            String value = editText.getText().toString();


            if (value != null && !value.equals(""))
            

                if(value.startsWith("."))
                    editText.setText("0.");
                
                if(value.startsWith("0") && !value.startsWith("0."))
                    editText.setText("");

                


                String str = editText.getText().toString().replaceAll(",", "");
                if (!value.equals(""))
                editText.setText(getDecimalFormattedString(str));
                editText.setSelection(editText.getText().toString().length());
            
            editText.addTextChangedListener(this);
            return;
        
        catch (Exception ex)
        
            ex.printStackTrace();
            editText.addTextChangedListener(this);
        

    

    public static String getDecimalFormattedString(String value)
    
        StringTokenizer lst = new StringTokenizer(value, ".");
        String str1 = value;
        String str2 = "";
        if (lst.countTokens() > 1)
        
            str1 = lst.nextToken();
            str2 = lst.nextToken();
        
        String str3 = "";
        int i = 0;
        int j = -1 + str1.length();
        if (str1.charAt( -1 + str1.length()) == '.')
        
            j--;
            str3 = ".";
        
        for (int k = j;; k--)
        
            if (k < 0)
            
                if (str2.length() > 0)
                    str3 = str3 + "." + str2;
                return str3;
            
            if (i == 3)
            
                str3 = "," + str3;
                i = 0;
            
            str3 = str1.charAt(k) + str3;
            i++;
        

    

    public static String trimCommaOfString(String string) 
//        String returnString;
        if(string.contains(","))
            return string.replace(",","");
        else 
            return string;
        

    

在你的 EditText 上使用这个类,如下所示

editText.addTextChangedListener(new NumberTextWatcherForThousand(editText));

获取输入为纯文本类型为Double

像这样使用同一个类的trimCommaOfString方法

NumberTextWatcherForThousand.trimCommaOfString(editText.getText().toString());

【讨论】:

当我删除数字光标到末尾

以上是关于Android EditText 中文本更改时自动添加千位分隔符的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何更改 EditText 字段中的文本大小?

更改字体颜色运行时 Android

是否可以在android中制作自动输入提示文本?

从android中的对话框更改TextView文本

Android Word-Wrap EditText 文本

更改操作栏searchview提示文本颜色