2010-07-29 18 views
10

Existen muchas preguntas relacionadas con la forma de mostrar/ocultar programáticamente el teclado virtual.Evitar que se descarte el teclado suave

Sin embargo, como todos sabemos, el botón Atrás de Android hará que el teclado sea descartado. ¿Hay alguna forma de evitar que el usuario desestime el teclado presionando el botón Atrás?

He intentado capturar el botón Atrás, pero cuando el teclado se muestra enKeyDown en mi actividad no se invoca cuando se presiona la tecla Atrás y el teclado virtual está visible.

Cualquier sugerencia sería muy apreciada.

+1

Esto parece moderadamente anti-usuario. ¿Por qué quieres hacer esto? – Qberticus

Respuesta

2

lo hice mediante el uso de dos métodos siguientes: Solución

@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

no funcionó, el teclado continúa oculto en el botón Atrás – htafoya

3

que he encontrado:

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

Esto evita que el teclado se cierre por la flecha atrás.

Cuestiones relacionadas