web-dev-qa-db-fra.com

Masquer le clavier virtuel sur Done Keypress sur Android?

Je me bats avec le bouton Terminé du clavier logiciel. Je ne parviens pas à appuyer sur la touche Terminé du clavier logiciel pour cacher le clavier. D'un autre bouton, cela fonctionne parfaitement avec

imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0);

mais le onKeyListener ne fonctionne pas comme je le souhaite. Lorsque je frappe sur editText, le clavier virtuel apparaît et son contenu est effacé des caractères.

Merci pour l'écoute!

Le fichier main.xml:

<EditText 
    Android:id="@+id/answer" 
    Android:layout_gravity="center_horizontal" Android:textSize="36px"
    Android:inputType="phone"
    Android:minWidth="60dp" Android:maxWidth="60dp"
/>

Le fichier Java:

private EditText editText;
//...
editText = (EditText)findViewById(R.id.answer);
editText.setOnClickListener(onKeyboard);
editText.setOnKeyListener(onSoftKeyboardDonePress);
//...

// method not working:
private View.OnKeyListener onSoftKeyboardDonePress=new View.OnKeyListener() 
{
    public boolean onKey(View v, int keyCode, KeyEvent event) 
    {
        if (event.getKeyCode() == KeyEvent.FLAG_EDITOR_ACTION)
        {
            // code to hide the soft keyboard
            imm = (InputMethodManager) getSystemService(
                Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0);
        }
        return false;
    }
};

private View.OnClickListener onKeyboard=new View.OnClickListener() 
{
    public void onClick(View v) 
    {
        editText.setText("");
    }
};

La méthode de travail utilisant un bouton (dans le même fichier Java):

private View.OnClickListener onDone=new View.OnClickListener() 
{
    public void onClick(View v) 
    {
        //....
        // code to hide the soft keyboard
        imm = (InputMethodManager) getSystemService(
            Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0);
    }
};

Edit: / Quand j'appuie sur la touche no "9", le clavier se cache. C'est étrange.

21
Benny Skogberg

Utilisez Android: imeOptions = "actionDone", comme ça:

<EditText
    ...
    Android:imeOptions="actionDone" />
39
alcsan
InputMethodManager inputManager = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput(0, 0);

avec le contexte étant votre activité.

21
Doge

Le changement de l'instruction if en if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) l'a fait fonctionner avec l'attribut xml Android:inputType="phone".

4
Benny Skogberg

Vous devriez jeter un oeil à setOnEditorActionListener () pour EditText:

Définissez un auditeur spécial à appeler lorsqu'une action est effectuée dans la vue texte . Cet appel sera appelé lorsque vous appuierez sur la touche Entrée ou lorsque Une action fournie à l'IME sera sélectionnée par l'utilisateur.

1
Stan

Utilisez le code ci-dessous avec Android:imeOptions="actionDone" son travail pour moi.

 <EditText
    Android:id="@+id/et_switch_name"       
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:hint="Name"
    Android:imeOptions="actionDone"       
    Android:inputType="textPersonName" />
0
Sagar Jethva