2015-01-28 14 views
0

질문 자체적으로 설명합니다.EditText가 포커스를 얻었을 때 키보드 보이기

편집 텍스트가 포커스를 얻었을 때 소프트 키보드를 표시하고 포커스가 사라지면 키보드를 숨 깁니다. 다음은 내가 사용한 코드입니다.

this.newTaskTitle = (EditText) taskCreationView.findViewById(R.id.newTaskTitle); 
    this.newTaskTitle.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      //Set up input manager 
      InputMethodManager keyboardManager = (InputMethodManager) getSystemService(
        Context.INPUT_METHOD_SERVICE 
      ); 
      if(hasFocus) { 
       Log.i(TAG,"hasFocus"); 
       //Display keyboard 
       keyboardManager.showSoftInput(
         v, 
         InputMethodManager.SHOW_IMPLICIT 
       ); 
      } else { 
       Log.i(TAG,"lostFocus"); 
       //Hide keyboard 
       keyboardManager.hideSoftInputFromInputMethod(
         v.getWindowToken(), 
         0 
       ); 
      } 
     } 
    }); 

EditText가 포커스를 잃을 때 else가 실행 되더라도 키보드는 절대로 숨겨지지 않습니다. 왜 그랬을까요?

키보드를 숨기는 올바른 방법이 아닙니까?

+0

소프트 키보드의 다음 버튼 또는 완료 버튼을 사용합니까? –

+0

나는 아주 확실하지는 않지만, 아마도 EditText로 뷰를 타입 변환해야 할 것입니다. EditText myEditText = (EditText) v; 그리고 나서 myEditText.getWindowToken() – vipluv

+0

@FahadIshaque 아니요, 레이아웃에 GONE으로 가시성을 설정하여 edittext를 제거하는 버튼이 있습니다. 해당 버튼의 OnClick은 텍스트 편집시 clearFocus를 명시 적으로 호출하고 다른보기에 포커스를 요청합니다. 그러나 키보드는 거기에 머물러 있습니다. – mahesmohan

답변

1

저는 OnFocusChangeListener를 설정할 필요가 없다고 생각합니다. 버튼 아래에서 onClick 메서드를 호출하고이 메서드를 호출하면 EditText의 가시성이 사라집니다. 포커스 소프트 키보드를 얻으면 자동으로 열립니다.

private void hideKeyBoard(Context context, EditText editText) { 
     InputMethodManager imm = (InputMethodManager) context 
       .getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); 
    } 
+0

어떻게 든 액티비티 멤버로 메소드를 배치하면 트릭을 만들 수 있습니다. 도와 줘서 고마워 알리. 그러나 다시 한번 질문은 왜 입력 관리자가 EditText의 onFocusChange 내부에서 초기화되었을 때 작동하지 않았는가? – mahesmohan

+0

사실, OnFocusChangeListener를 구현하는 것은 소프트 키보드를 표시하거나 숨기는 올바른 방법이 아닙니다. 아마도 EditText의 가시성을 없애고 onFocusChange를 전혀 호출하지 않거나 다른 것일 수 있습니다. – Ali

+0

나는 가시성을 GONE으로 설정했지만, EditText에서 clearFocus()를 명시 적으로 호출 한 후에야 나타납니다. 또한 로그에는 else 부분에 추가 한 "lostFocus"정보 메시지가 나열되어 있지만 키보드는 숨겨지지 않았습니다. – mahesmohan