【问题标题】:Add Thousand Separators Automatically While Text Changes in Android EditTextAndroid EditText 中文本更改时自动添加千位分隔符
【发布时间】:2023-03-15 11:10:02
【问题描述】:

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

我见过

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

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

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

还有更多问题和答案

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

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

我将不胜感激。

【问题讨论】:

    标签: android android-edittext


    【解决方案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());
    

    【讨论】:

    • 当我删除数字光标到末尾
    猜你喜欢
    • 2016-04-06
    • 2011-09-24
    • 1970-01-01
    • 2014-11-07
    • 2020-08-20
    • 2012-07-12
    相关资源
    最近更新 更多