2010-07-29 93 views
10

關於如何以編程方式顯示/隱藏軟鍵盤有很多問題。防止軟鍵盤被解僱

但是,正如我們都知道的android後退按鈕將導致鍵盤被解僱。 有沒有辦法阻止用戶按下後退按鈕來解除鍵盤鎖定?

我試圖捕獲後退按鈕,但是當按下後退鍵並且軟鍵盤可見時,在我的活動中顯示onKeyDown時不會調用鍵盤。

任何建議將不勝感激。

+1

這似乎是適度的反用戶。你爲什麼想這樣做? – Qberticus 2010-07-29 21:05:24

回答

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 2016-11-02 06:19:50

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

這可以防止鍵盤由後退按鈕被關閉。