/var/log/messages

Nov 18, 2013 - 1 minute read - Comments - android

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 を消すように修正。

{% gist 7524251 %}

さらに追記

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

EoPL の Exercise 2.22 cookbook 探すなど

comments powered by Disqus