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

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

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

这是我的 XML 代码:

        <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        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();
        }
    });
}

}

任何帮助将不胜感激。

【问题讨论】:

标签: java android xml android-layout android-activity


【解决方案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) 时会再次调用它,并创建一个循环,导致 StackOverflow 异常。

【讨论】:

  • 谢谢您,先生!我按照你说的做了,第三个数字被逗号分开,但有问题..首先:数字以相反的格式输入。因此 123 结果为 321。 第二:输入第 5 个数字后,edittext 将重置。您是否考虑过我提到的单独的 java 类? @新浪Rezaei
  • 无论如何我从你的回答中得到了一个线索,并设法自己使用了这个课程。非常感谢亲爱的朋友 :)
  • 如果答案对你有帮助,你应该接受答案
猜你喜欢
  • 2023-03-15
  • 2011-09-24
  • 2021-11-17
  • 2015-07-12
  • 2012-07-12
  • 2021-02-20
相关资源
最近更新 更多