2010-07-29 5 views
10

Il existe de nombreuses questions relatives à la manière d'afficher/de masquer le clavier logiciel. Cependant, comme nous le savons tous le bouton arrière Android provoquera le rejet du clavier. Y a-t-il un moyen d'empêcher l'utilisateur de rejeter le clavier en appuyant sur un bouton arrière?Empêcher le rejet d'un clavier logiciel

J'ai essayé de capturer le bouton de retour, mais lorsque le clavier est affiché onKeyDown dans mon activité n'est pas invoqué lorsque la touche de retour est enfoncée et que le clavier logiciel est visible.

Toutes les suggestions seraient grandement appréciées.

+1

Cela semble modérément anti-utilisateur. Pourquoi veux-tu faire cela? – Qberticus

Répondre

2

Je l'ai fait en utilisant deux méthodes suivantes:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK)  
    { 
     ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput 
       (InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY); 
    } 
    return super.onKeyUp(keyCode, event); 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK)  
    { 
     ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput 
       (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+0

n'a pas fonctionné, le clavier continue de se cacher sur le bouton de retour – htafoya

3

J'ai trouvé la solution:

public class KeyBoardHolder extends EditText { 
    public KeyBoardHolder(Context context) { 
     super(context); 
    } 

    public KeyBoardHolder(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public KeyBoardHolder(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    public KeyBoardHolder(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 

    @Override 
    public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      return true; 
     } 
     return false; 
    } 
} 

Cela empêche le clavier d'être fermé par bouton retour.

Questions connexes