2010-07-29 3 views
10

Есть много вопросов, связанных с тем, как программно отображать/скрывать мягкую клавиатуру.Предотвращение отклонения мягкой клавиатуры

Однако, поскольку все мы знаем, что кнопка обратной связи Android приведет к увольнению клавиатуры. Есть ли способ предотвратить отказ пользователя от клавиатуры нажатием кнопки «Назад»?

Я попытался захватить кнопку «Назад», но когда клавиатура отображается на клавиатуре в моей активности, она не вызывается, когда нажата клавиша «назад», и отображается мягкая клавиатура.

Любые предложения были бы весьма полезными.

+1

Это кажется умеренно анти-пользователем. почему ты хочешь сделать это? – Qberticus

ответ

2

Я сделал это с помощью следующих двух методов:

@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

не работает, клавиатура продолжает скрываться на задней кнопке – htafoya

3

Я нашел решение:

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

Это предотвращает клавиатуры от закрытия с помощью кнопки возврата.

Смежные вопросы