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

时间:2016-01-01 14:16:08

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

我希望使用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();
        }
    });
}

}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

所有的拳头,您的活动类中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中光标的位置。检查并更新我plz:)

暂时删除TextWatcher的原因是,如果观察者仍在EditText上,则在调用editText.setText(s)时会再次调用它,并创建一个导致StackOverflow异常的循环。