私が欲しい のは、ユーザーが10.40などの値を入力できるEditTextがあります。ユーザーが編集を終えたら、入力を通貨にフォーマットします。たとえば、上記の値は$ 10.40(Locale.USの場合)にフォーマットされます。そして、その結果を、ユーザーが以前に編集したのと同じEditTextで表示します。
問題 私は彼の入力をフォーマット(つまり変更)しようとしているので、彼がいつ完了したかを知る必要があります(したがって、私のフォーマットは彼の進行中の入力に干渉しません)。
私が試し たTextWatcherは、すべての編集で起動するため、オプションではありません。したがって、ユーザーが1、0、4、ドット、およびゼロ(= 10.40)を入力すると発生します。現在、希望どおりに機能するOnFocusChangeListenerを使用していますが、問題は次のとおりです。アプリケーションにボタンがあり、EditTextの編集後にユーザーがボタンをクリックしても、EditTextはフォーカスを失うことはないため、フォーマットコードは呼び出されません。 ..
この後、ボタンのフォーカスをいじってみて、FocusableInTouchModeに設定しました。これにより、ボタンを最初にフォーカスを取得し、2番目にアクティブ化されるため、ボタンを2回クリックして起動する必要があります(これは失敗です)。時間。たくさんのハッキングをした後、このジレンマを解決する方法について誰かがアイデアを持っているかどうか疑問に思いました。
いくつかのコード
上記の関数のEditTextに次のOnFocusChangeListenerを追加します。EditTextは、CurrencyTextbox内にカプセル化されています(これは実際には関係ありません)。
@Override
protected OnFocusChangeListener getOnFocusChangeListener() {
return new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
//Member variable in the class which contains an EditText
CurrencyTextbox.this.hadFocus = true;
} else {
// Thes EditText has lost focus
Log.v(TAG, "Lost focus.");
if (CurrencyTextbox.this.hadFocus) {
// We previously had focus, now we lost it, format the user input!
// Get current value of the Textbox
String value = CurrencyTextbox.this.textbox.getText().toString();
// Formatting the user input
value = String.format(//Doing some formatting);
// Reset the had focus
CurrencyTextbox.this.hadFocus = false;
}
}
}
};
}
ただし、問題は、上記のOnFocusChangelistenerが呼び出されるのは、EditTextがフォーカスを失った場合のみですが、アクティビティのボタンをクリックしてもフォーカスが失われることはなく、前述のように、ボタンのisFocusableInTouchModeをtrueに設定することはできません。発砲するには毎回2回クリックする必要があるためです。