2013-06-20 3 views
9

프래그먼트 내부에 EditText가 있는데, 그 자체는 액션 바를 사용합니다. EditText 상자 내부를 터치하면 돋보기 (검색) 아이콘이있는 키 중 하나가있는 소프트 키보드가 나타납니다. 일부 텍스트를 입력하고 검색 키를 클릭하면 onEditorAction에서 입력 된 문자열을 처리 할 수 ​​있지만 소프트 키보드는 계속 표시됩니다. 프로그래밍 방식으로 어떻게 닫을 수 있습니까?프래그먼트에서 소프트 키보드를 닫는 방법

그런데 내가 EditText에 대한 일부 설정을 검색시 자동으로 닫도록 설정할 수 있다면, 여전히 내 키보드가있는 것처럼 소프트 키보드를 메서드 호출로 닫을 수 있는지 알고 싶습니다. 검색 버튼 (소프트 키보드와 관련 없음)과 소프트 키보드가 눌려지면 닫아야합니다.

참고 :이 질문에 답하기 전에 누군가가 이전 질문을 되풀이하기 전에 여러 가지 점에서 소프트 키보드를 숨기는 것에 대해 많은 Q & A를 보았습니다. 많은 답변이 비효율적으로 복잡해 보입니다. 사용자가 키보드를 영구히 숨기거나 아니면 사용자가 EditText 필드를 다시 누를 때까지 일시적으로 닫는 지 여부는 명확하지 않습니다. 또한 일부 답변에는 조각으로 제공되지 않는 메서드에 대한 호출이 필요합니다. 내가 작업 표시 줄 아이콘을 클릭하고 일하고 때 어쩌면 내가 오해 (귀하의 경우 작동하지 않을 필요가 없지 않은가?

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

+0

재미있는 부분은 다른 게시물을 검색 할 때 수동으로 안드로이드에 키보드를 숨기는 것이 WTF-why-my-device-is-not-applied 문제라는 것입니다. 의도하지 않은 상황이 발생했을 때 당신을 구제 해 줄 것을 권합니다. 또는 앱의 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

나는 조각에이 코드를 사용하고 있습니다 질문).

7

이것은 안드로이드 용 소프트 키보드를 숨기는 코드입니다. 내 조각에서

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의 XML이 있는지 확인하는 것입니다

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

그런 설정 Listener를 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 
     }) 
관련 문제