入力をお金の形式のみでフォーマットする編集テキストエントリをどのように作成しますか?ユーザーが5を入力すると、入力は「$ 0.05」のようになり、3を入力すると、入力は「$ 0.53」のようになり、最後に6を入力すると、入力は「$5.36」のようになります。
10736 次
7 に答える
8
ninjasense の完全なソリューションは基本的に機能しますが、いくつかの問題があります。
- 「onTextChanged」ハンドラーでフィールドのデータが変更されるたびに、カーソル位置がフィールドのインデックス 0 にリセットされます。これは、金額を入力するときに発生するのが少し面倒です。
- 通貨の値をフォーマットするためにフロートを使用しますが、これは逆効果になる可能性があります。
最初の問題についてはまだ解決策がありません.2番目の問題については、次のようなコードが機能します:
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if(!s.toString().matches("^\\$(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$"))
{
String userInput= ""+s.toString().replaceAll("[^\\d]", "");
StringBuilder cashAmountBuilder = new StringBuilder(userInput);
while (cashAmountBuilder.length() > 3 && cashAmountBuilder.charAt(0) == '0') {
cashAmountBuilder.deleteCharAt(0);
}
while (cashAmountBuilder.length() < 3) {
cashAmountBuilder.insert(0, '0');
}
cashAmountBuilder.insert(cashAmountBuilder.length()-2, '.');
cashAmountBuilder.insert(0, '$');
cashAmountEdit.setText(cashAmountBuilder.toString());
}
}
于 2011-03-04T09:23:49.587 に答える
3
Zds からの構築。
カーソルをフィールドの最後に配置したままにするには、これを使用します。
cashAmountEdit.setTextKeepState(cashAmountBuilder.toString());
Selection.setSelection(cashAmountEdit.getText(), cashAmountBuilder.toString().length());
于 2011-03-23T22:13:12.510 に答える
1
これが私の完全な解決策です:
tvValue.setRawInputType(Configuration.KEYBOARD_12KEY);
tvValue.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
// TODO Auto-generated method stub
// here i converted to string
if(!s.toString().matches("^\\$(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$"))
{
String userInput= ""+s.toString().replaceAll("[^\\d]", "");
Float in=Float.parseFloat(userInput);
float percen = in/100;
tvValue.setText("$"+percen);
}
}
});
于 2011-02-21T21:20:36.263 に答える
1
TextWatcher は少し扱いにくいことがわかりました。代わりに、キー リスナーを設定できます。
setKeyListener(new CalculatorKeyListener());
// Must be called after setKeyListener(), otherwise is overridden
setRawInputType(Configuration.KEYBOARD_12KEY);
次に、NumberKeyListener を拡張する KeyListener を作成します。
class CalculatorKeyListener extends NumberKeyListener {
@Override
public int getInputType() {
return InputType.TYPE_CLASS_NUMBER;
}
@Override
public boolean onKeyDown(View view, Editable content, int keyCode, KeyEvent event) {
if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {
digitPressed(keyCode - KeyEvent.KEYCODE_0);
} else if (keyCode == KeyEvent.KEYCODE_DEL) {
deletePressed();
}
return true;
}
@Override
protected char[] getAcceptedChars() {
return new char[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
}
}
次に、文字を正しく表示する必要がありますが、それは難しくありません。セントを追跡し、10 で除算または乗算し、NumberFormat を使用して正しい書式設定を取得します。
于 2010-12-30T16:49:26.290 に答える
1
TextWatcher を使用して、そのようなことを行うことができます。
TextWatcher の拡張: http://d.android.com/reference/android/text/TextWatcher.html
public class MyTextWatcher implements TextWatcher {
public void afterTextChanged(Editable arg0) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
}
次に、それを editText に追加します
myEditText.addTextChangedListener(new MyTextWatcher());
于 2010-06-10T11:26:38.000 に答える