Android: Evalúe EditText después de que el usuario termine de editar

Lo que quier Tengo un EditText, donde el usuario puede ingresar un valor, como 10.40. Una vez que el usuario termina de editar, estoy formateando su entrada a una moneda, por ejemplo, el valor mencionado anteriormente se formateará a $ 10.40 (en el caso de Locale.US). Y muestro ese resultado en el mismo EditText que el usuario editó previamente.

Problem Debido a que voy a formatear (es decir, modificar) su entrada, necesito saber cuándo ha terminado (para que mi formateo no interfiera con su entrada en curso).

Lo que probé TextWatcher no es una opción, ya que se activa en cada edición, por lo tanto, cuando el usuario ingresa uno, cero, cuatro, punto y cero (= 10.40). Actualmente estoy usando un OnFocusChangeListener que funciona según lo deseado, PERO el problema es: tengo botones en mi aplicación y si el usuario hace clic en un botón después de editar EditText, EditText no perderá el foco, por lo tanto, mi código de formato nunca se llama. ..

Después de esto, intenté jugar con el foco del botón, configurándolo en FocusableInTouchMode, lo que hace que se haga clic dos veces en el botón para disparar (lo cual es un no ir), ya que gana el foco la primera vez y se activa. segunda vez. Después de tanto hackear, me preguntaba si alguien tenía una idea de cómo resolver este dilema.

Algunos códigos

Agrego el siguiente OnFocusChangeListener a mi EditText cuya función describí anteriormente. EditText está encapsulado dentro de CurrencyTextbox (que no es realmente relevante):

@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;
                }
            }
        }
    };
}

Sin embargo, el problema es que el OnFocusChangelistener anterior solo recibe una llamada si mi EditText pierde el foco, pero NO pierde el foco cuando hago clic en un botón en mi Actividad y, como se indicó anteriormente, no es factible establecer el botón isFocusableInTouchMode en true , ya que luego se debe hacer clic dos veces cada vez para disparar.

Respuestas a la pregunta(8)

Su respuesta a la pregunta