77 votes

Savoir quand Éditer le texte est terminé en cours d'édition

Comment savoir quand mon texte est terminé? Comme lorsque l'utilisateur sélectionne la case suivante ou appuie sur le bouton Terminé du clavier logiciel.

Je veux savoir ceci afin que je puisse bloquer l'entrée. Il semble que afterTextChanged de l'observateur de texte se produise après la saisie de chaque caractère. Je dois faire quelques calculs avec l'entrée, aussi je voudrais éviter de faire le calcul après la saisie de chaque caractère.

Merci

111voto

Reno Points 22138

En utilisant quelque chose comme ça

  meditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_DONE) {

                yourcalc();

                return true;
            }
            return false;
        }
    });
 

43voto

Rich Points 16818

EditText hérite de setOnFocusChangeListener qui prend une implémentation de OnFocusChangeListener.

Implémentez onFocusChange et il existe un paramètre booléen pour hasFocus. Lorsque cela est faux, vous avez perdu le focus sur un autre contrôle.

MODIFIER

Pour traiter les deux cas - éditez le texte en perdant le focus OU l'utilisateur clique sur le bouton "Terminé" - créez une seule méthode appelée par les deux écouteurs.

     private void calculate() { ... }

    btnDone.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            calculate();
        }
    });

    txtEdit.setOnFocusChangeListener(new OnFocusChangeListener() {          

        public void onFocusChange(View v, boolean hasFocus) {
            if(!hasFocus)
                calculate();
        }
    });
 

15voto

jsanmarb Points 139

En utilisant un objet EditText xml défini comme ceci:

     <EditText
        android:id="@+id/create_survey_newquestion_editText_minvalue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:ems="4"
        android:imeOptions="actionDone"
        android:inputType="number" />
 

Nous pouvons capturer son texte i) lorsque l'utilisateur clique sur le bouton Terminé du clavier logiciel (OnEditorActionListener) ou ii) lorsque l'EditText a perdu le focus de l'utilisateur (OnFocusChangeListener) qui se trouve maintenant sur un autre EditText:

     /**
     * 3. Set the min value EditText listener
     */
    editText= (EditText) this.viewGroup.findViewById(R.id.create_survey_newquestion_editText_minvalue);
    editText.setOnEditorActionListener(new OnEditorActionListener()
    {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
        {
            String input;
            if(actionId == EditorInfo.IME_ACTION_DONE)
            {
                input= v.getText().toString();
                MyActivity.calculate(input);
            }
        }
    });
    editText.setOnFocusChangeListener(new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View v, boolean hasFocus)
        {
            String input;
            EditText editText;

            if(!hasFocus)
            {
                editText= (EditText) v;
                input= editText.getText().toString();
                MyActivity.calculate(input);
            }
        }
    });
 

Cela fonctionne pour moi. Vous pouvez masquer le clavier logiciel après avoir effectué les calculs en utilisant un code comme celui-ci:

 private void hideKeyboard(EditText editText)
{
    InputMethodManager imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
 

0voto

user717593 Points 11

Pour être plus élevé, vous pouvez utiliser la méthode afterTextChanged () de TextWatcher .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X