2015-05-13 113 views
7

圖爲我的應用程序的一部分,AutoCompleteTextView帶有連接適配器。 當用戶在該視圖中輸入內容時,會顯示自動填充建議。按下向下箭頭時隱藏鍵盤

我遇到的問題是:當顯示建議並按下設備的向下箭頭時,只有AutoCompleteTextView的建議關閉,鍵盤保持打開狀態,需要再次點擊向下箭頭才能消失。

我確實希望的建議在第一次敲擊時向下箭頭消失。

我試圖覆蓋onBackPressed,但是當它被點擊向下箭頭時不會被調用,大概是因爲它不被認爲是「後退」。

我該怎麼做?

編輯:我知道如何以編程方式隱藏鍵盤,我想我的問題是檢測'向下箭頭'水龍頭。

enter image description here

+0

嘗試看看這個[關閉/隱藏Android的軟鍵盤] [1] [1]:HTTP:/ /stackoverflow.com/a/1109108/3383038 –

+0

我知道如何以編程方式隱藏鍵盤,我想我的問題是檢測'下箭頭'水龍頭。 – FWeigl

+0

也許我很笨,但我不明白你說的是哪個下鍵?一個來自物理鍵盤? – Haspemulator

回答

5

嘗試重寫onKeyPreIme()方法在AutoCompleteTextView如下:

@Override 
public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == 1) { 
     super.onKeyPreIme(keyCode, event); 
     hideKeyboard() 
     return true; 
    } 
    return super.onKeyPreIme(keyCode, event); 
} 
+0

工程就像一個魅力,謝謝! – FWeigl

-2
InputMethodManager inputManager = (InputMethodManager) 
            getSystemService(Context.INPUT_METHOD_SERVICE); 

inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 
            InputMethodManager.HIDE_NOT_ALWAYS); 

需要導入android.view.inputmethod.InputMethodManager;

0

你可以嘗試這樣的事情:

private boolean mIsKeyboardShown; 
private EditText mSearchTextView; 

@Override 
protected void onCreate(Bundle bundle) 
    ... 
    mSearchTextView = (EditText) findViewById(R.id.search); 
    View activityRootView = findViewById(R.id.activityRoot); 
    activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight(); 
      // if more than 100 pixels, its probably a keyboard... 
      mIsKeyboardShown = (heightDiff > 100); 
     } 
    }); 
} 

public void onBackPressed() { 
    if(mIsKeyboardShown) { 
    // close the keyboard 
    InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
    inputManager.hideSoftInputFromWindow(mSearchTextView.getWindowToken(), 0); 
    } else { 
    super.onBackPressed(); 
    } 
} 

我沒有嘗試過的代碼,但我認爲這是正確的做法。

相關問題