2013-06-20 41 views
9

我在片段內部有一個EditText,它本身在actionbarsherlock選項卡內。當我觸摸EditText框內時,會出現一個軟鍵盤,其中一個鍵帶有放大鏡(搜索)圖標。當我鍵入一些文本並單擊搜索鍵時,我可以在我的onEditorAction中處理鍵入的字符串,但軟鍵盤仍然顯示。我怎樣才能以編程方式關閉它?如何關閉片段中的軟鍵盤

順便說一句,如果一個答案是我可以配置EditText的一些設置,使它在搜索時自動關閉,我仍然想知道軟鍵盤是否可以用方法調用關閉,因爲我也有自己的屏幕上的搜索按鈕(與軟鍵盤無關),我也希望軟鍵盤在按下時關閉。

注意:在任何人急於聲稱此問題是前一個問題的重複之前,我已經看到許多關於隱藏軟鍵盤的許多問題。許多答案似乎過於複雜,並且在很多情況下,不清楚這個想法是永久隱藏鍵盤,還是隻是暫時關閉它,直到用戶再次點擊EditText字段。還有一些答案需要調用片段中不可用的方法。

+0

有趣的部分是,當你搜索其他職位,手動隱藏鍵盤是非常WTF爲什麼我的設備是未應用的問題。如果發生意外情況,我建議你放心。或者,更改您的應用UX。 :( – Youngjae

回答

37

在我的片段我關閉鍵盤簡單地以這樣的方式

public static void closeKeyboard(Context c, IBinder windowToken) { 
    InputMethodManager mgr = (InputMethodManager) c.getSystemService(Context.INPUT_METHOD_SERVICE); 
    mgr.hideSoftInputFromWindow(windowToken, 0); 
} 

closeKeyboard(getActivity(), yourEditText.getWindowToken()); 
2

我使用的片段這段代碼

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(
          Context.INPUT_METHOD_SERVICE); 
         imm.hideSoftInputFromWindow(text.getWindowToken(), 0); 

當我點擊的動作欄圖標和它的工作,我不明白爲什麼它不應該在你的情況下工作(也許我誤解問題)。

7

這是工作代碼隱藏Android軟鍵盤。

try { 
      InputMethodManager input = (InputMethodManager) activity 
        .getSystemService(Activity.INPUT_METHOD_SERVICE); 
      input.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
     }catch(Exception e) { 
      e.printStackTrace(); 
     } 
0

您可以檢查我的答案here。這是在片段內爲我工作的唯一方式。

-1

在片段工作

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
0

一個清晰的方式來關閉一個片段內一個EditText的鍵盤和clearfocus,爲確保您的EditText上XML有:

android:id="@+id/myEditText"  
android:imeOptions="actionDone" 

然後設置聆聽您的EditText(使用Kotlin和片段):

myEditText.setOnEditorActionListener({ v, actionId, event -> 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 
       myEditText.clearFocus() 
       val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 
       imm.hideSoftInputFromWindow(view!!.windowToken, 0)  
      } 
      false 
     })