微妙なサンプルをでっち上げたので備忘メモを投入。
こんな方法で良いのかどうか、と思ってますがとりあえずヤッツケな実装ってことで以下。
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 略しちゃってますけどご容赦頂ければ幸いです。