如何在 EditText 中自动添加千位分隔符?

Posted

技术标签:

【中文标题】如何在 EditText 中自动添加千位分隔符?【英文标题】:How to automatically add thousand separators in EditText? 【发布时间】:2016-04-06 01:01:10 【问题描述】:

当用户使用this 主题中的最后一个解决方案键入时,我想在 EditText 中自动添加千位分隔符。

我已经按照描述创建了一个单独的 java 文件作为一个类并粘贴了给定的代码。但我不知道如何修改我的活动代码以达到预期的效果。

这是我的 XML 代码:

        <EditText
        android:layout_
        android:layout_
        android:inputType="number"
        android:id="@+id/editText"
        android:layout_weight="1"/>

而我的相关活动是这样的:

public class CostofHearingActivity extends AppCompatActivity 

public void calculate(View view)

// some calculations




@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_costof_hearing);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        
    );

任何帮助将不胜感激。

【问题讨论】:

可能有用:***.com/a/5323787/2911458 @stkent :猜猜它仅用于更改格式作为结果字符串。不是实时更改.. 【参考方案1】:

首先,你的 EditText 在你的活动类中的引用在哪里?

其次,正如你提到的链接所说,你必须在你的edittext中添加一个文本观察器并重置用户的输入文本。

您可以在活动中使用以下代码:

private EditText editText;
private final TextWatcher watcher = new TextWatcher() 

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

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

    @Override
    public void afterTextChanged(Editable view) 
        String s = null;
        try 
            s = String.format("%,d", Long.parseLong(view.toString()));
         catch (NumberFormatException e) 
        
        editText.removeTextChangedListener(watcher);
        editText.setText(s);
        editText.addTextChangedListener(watcher);
    
;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_costof_hearing);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    ...
    editText = (EditText) findViewById(R.id.editText);
    editText .addTextChangedListener(watcher);

我自己还没有检查过它可能会导致光标在 EditText 中的位置发生变化。检查它并更新我也请:)

暂时移除 TextWatcher 的原因是如果 watcher 留在 EditText 上,在调用 editText.setText(s) 时会再次调用它,并创建一个循环,导致 *** 异常。

【讨论】:

谢谢您,先生!我按照你说的做了,第三个数字被逗号分开,但有问题..首先:数字以相反的格式输入。因此 123 结果为 321。 第二:输入第 5 个数字后,edittext 将重置。您是否考虑过我提到的单独的 java 类? @新浪Rezaei 无论如何我从你的回答中得到了一个线索,并设法自己使用了这个课程。非常感谢亲爱的朋友 :) 如果答案对你有帮助,你应该接受答案

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

写一个js函数,添加千位分隔符

PHP在总和中添加千位分隔符[重复]

PHP在数字中添加千位分隔符并保持前导零

在 WooCommerce 中为产品数量添加千位分隔符

如何在 5.7.0 版本的 D3.js 中制作自定义千位分隔符和小数字符

在 Swift 中向 Int 添加千位分隔符