/var/log/messages

debugging with sixth sense

EditText でカンマ編集

微妙なサンプルをでっち上げたので備忘メモを投入。

こんな方法で良いのかどうか、と思ってますがとりあえずヤッツケな実装ってことで以下。

private String format(int val) {
    DecimalFormat df = new DecimalFormat(",###");
    return df.format(val);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main1);

    EditText et = (EditText)findViewById(R.id.temptv);
    et.setOnEditorActionListener(new OnEditorActionListener() {

        @Override
        public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
            arg0.setText(format(Integer.parseInt(arg0.getText().toString())));
            return true;
        }

    });
}

てか、これってカンマ入りで入力できんな。困った。

困り果てつつ

結構長い時間もごもごしてたのですが、結局以下で何とかできることが分かるなどorz

private String format(int val) {
    DecimalFormat df = new DecimalFormat(",###");
    return df.format(val);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main1);

    EditText et = (EditText)findViewById(R.id.temptv);
    et.setOnEditorActionListener(new OnEditorActionListener() {

        @Override
        public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {

            try {
                Number num = mNf.parse(arg0.getText().toString().replaceAll(",", ""));
                int val = num.intValue();
                arg0.setText(format(val));
            } catch (ParseException e) {

            }
            return false;
        }

    });
}

そもそも的にカンマ除去しちゃえば良いのね的解でアレでした。カンマ無視してその中に 4 桁数値入力、なんてのも parse で例外吐いていた模様。

あと、setText してるのに addTextChangedListener して再帰ループしたりしてとほほでした。

もひとつ、上の記述だと例外発生時の記述が空なんですが、これもハマッた原因でした。最初はコールバック呼び出されていないのか、って誤解してた次第スorz

追記

onTouch な処理を追加して入力時には comma を消すように修正。

さらに追記

レイアウトな XML 略しちゃってますけどご容赦頂ければ幸いです。

Comments