2013-06-20 3 views
9

У меня есть EditText внутри фрагмента, который сам по себе находится на вкладке actionbarsherlock. Когда я прикасаюсь к окну EditText, появляется мягкая клавиатура с одной из клавиш, имеющих значок увеличительного стекла (поиск). Когда я набираю текст и нажимаю на ключ поиска, я могу обработать типизированную строку в моем onEditorAction, но мягкая клавиатура остается на дисплее. Как я могу закрыть его программно?Как закрыть мягкую клавиатуру во фрагменте

Кстати, если один из ответов заключается в том, что я могу настроить некоторые параметры для EditText таким образом, чтобы он автоматически закрывался при поиске, я все равно хотел бы знать, можно ли закрыть мягкую клавиатуру вызовом метода, поскольку у меня также есть свой собственный кнопку поиска на экране (ничего общего с мягкой клавиатурой), и я хотел бы, чтобы мягкая клавиатура закрывалась, когда она была нажата.

Примечание: перед тем, как кто-либо устремится заявить, что этот вопрос является повторением предыдущего вопроса, я видел много Q & A о сокрытии мягкой клавиатуры в разных точках. Многие ответы кажутся чрезмерно сложными, и во многих случаях неясно, должна ли идея постоянно скрывать клавиатуру или просто временно закрывать ее, пока пользователь снова не ударит по полю EditText. Также некоторые ответы требуют вызовов методов, недоступных в фрагментах.

+0

Забавная часть заключается в том, что, когда вы искали другие сообщения, скрывать клавиатуру в Android вручную - это очень проблема WTF-why-my-device-is-not-apply. Я рекомендую вам облегчить ум в случае непредвиденной ситуации. Или измените приложение 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

Четкое способ закрыть клавиатуру и clearfocus из с EditText внутри фрагмента, чтобы убедиться, что ваш 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 
     }) 
Смежные вопросы