2013-07-15 17 views
3

我有一個搜索查看我的佈局(而不是在動作條),我無法用通常的方法來消除鍵盤:安卓:如何以無焦點的一個搜索查看編程

public static void hideKeyboard(Activity activity) { 
    InputMethodManager imm = (InputMethodManager)activity 
      .getSystemService(Context.INPUT_METHOD_SERVICE); 

    if (imm != null && activity != null) { 
     View currentFocus = activity.getCurrentFocus(); 

     if (currentFocus != null) { 
      imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), 0); 
     } 
    } 
} 

的搜索查看保持其焦點狀態。在較舊的設備上使用此方法會顯示鍵盤被解散,然後重新顯示。

我認爲問題在於事實上,SearchView實際上是一個View層次結構,它在內部維護自己的狀態。

我該如何解除鍵盤鎖定並將焦點對準SearchView?

回答

7

這聽起來像什麼可能發生的事情是,你沒有專注於SearchView,然後它說「哦,等待,我仍然有焦點,我需要鍵盤」。 activity.getCurrentFocus().clearFocus()清除了重點?

+0

這就是當前的代碼片斷。 – Brad

+0

在您發佈的源代碼中,它看起來不像您手動調用clearFocus()。當我看看SearchView的源代碼時,看起來像調用setImeVisibility(這是您要在此修改的內容)和clearFocus是兩個獨立的,這意味着手動清除焦點可能會有所幫助。除此之外,[這個用戶](http://stackoverflow.com/questions/7409288/how-to-dismiss-keyboard-in-android-honeycomb-searchview)也有類似的問題,儘管所有提出的解決方案都需要你失去了你當前公開的通用接口。 – Jonathan

+1

你先生是冠軍。我完全誤解了SearchView的工作方式。謝謝您的幫助。 – Brad