2012-12-04 5 views
23

showSoftInput()은 나를 위해 키보드를 표시하지 않지만 toggleSoftInput()는 표시하지 않습니다. 에뮬레이터를 사용할 때 하드 키보드를 사용하지 않도록 설정 한 다른 게시물을 보았지만 에뮬레이터를 사용하지 않았습니다. 하드 키보드가없는 실제 기기에 APK를로드하고 있습니다. 두 방법 모두 작동하면 안됩니까? showSoftInput()이 작동하지 않는 이유는 무엇입니까? 키보드를 특정 텍스트 필드와 명시 적으로 연관시키고 싶습니다.android softkeyboard showSoftInput 대 toggleSoftInput

은 작동하지 않습니다 :

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
editText.setText("textchange"); //i see the text field update 
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); 

작품 :

InputMethodManager imm = (InputMethodManager) getDelegate().getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); 
+0

알아 냈습니까? 나는 이미이 문제에 3 일을 보냈다. 토글을 사용하려고하면 이미 보이기 때문에 키보드가 숨겨지는 경우가 있습니다. 물론 안드로이드는 소프트 입력이 표시되는지 여부를 쿼리 할 수있는 기능을 제공해야한다고 생각하지 않습니다. – bgolson

답변

1

이 시도 :

public void showTheKeyboard(Context context, EditText editText){ 
    InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 
} 

을이 here

+1

나는 토글해야했다. 어떤 이유인지 showSoftInput이 나를 위해 작동하지 않았다 – prostock

+0

이것은 나를 위해 완벽하게 작동합니다. 감사! –

17

에서 자습서를 읽어 작동하지 않는 경우 것 같습니다. 키보드는 처음에 표시되지만 다음과 같은 작업 (하지만 실제로 더러운 일 - 주위) 때문에, 다른 무언가가 숨겨져 있음 :

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
editText.postDelayed(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     editText.requestFocus(); 
     imm.showSoftInput(editText, 0); 
    } 
}, 100); 

그리고 로그 캣을 볼 때 나는이 메시지 뒤에 원인은 처음에 키보드를 숨 깁니다 의심 표시된 :

시작 입력시 클립 보드 대화 상자 숨기기 ... 다른 사람이 완료했습니다 ...!

+1

사실 onCreate에서 프로그래밍 방식으로 키보드를 표시하려고 할 때 저에게 효과가있는 유일한 방법입니다. 나는 이유를 알았 으면 좋겠다. 어쨌든 고마워요. –

+0

비슷한 문제가있었습니다. 해결되었습니다. 감사합니다. –

+0

좋은 트릭, 고마워요. – Lev

2

이 질문에 대한 정답은 왜 showSoftInput does not work이고 toggleSoftInput은 무엇입니까?

키보드를 표시하려는보기에 포커스가 없습니다. 그래서이 문제를 해결하고보기에 방법에 다음과 같은 호출하는 방법 에게 showSoftInput 당신이 한 것입니다 사용 : 당신이보기를 클릭하면이 유지하고 캡처 있는지 확인합니다 위의 방법을 호출

setFocusable(true); 
    setFocusableInTouchMode(true); 

을 초점.

+0

정답은 적어도 예제를 보여 주어야합니다 ... 작동하지 않았기 때문입니다! –

4

보기 키보드 + 초점 또한 키보드

@Override 
public void onResume() { 
    super.onResume(); 

    inputSearch.setFocusableInTouchMode(true); 
    inputSearch.requestFocus(); 

    // Show Keyboard 
    InputMethodManager imm = (InputMethodManager) getSherlockActivity().getSystemService(
      Context.INPUT_METHOD_SERVICE); 
    imm.showSoftInput(inputSearch, InputMethodManager.SHOW_IMPLICIT); 
} 

P.S inputSearch = (글고) getSherlockActivity(). findViewById를 (R.id을 숨기려면.inputSearch); 장치가 하드 (슬라이드 아웃)이있는 경우

// Hide Keyboard 
InputMethodManager imm = (InputMethodManager) getSherlockActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(inputSearch.getWindowToken(), 0); 
1
public void hideKeyboard() { 
    myTextView.setFocusable(true); 
    myTextView.setFocusableInTouchMode(true); 
    imm.hideSoftInputFromWindow(myTextView.getWindowToken(), 0); 
} 

가 작동하지 않습니다

public void hideKeyboard() { 
    imm.hideSoftInputFromWindow(myTextView.getWindowToken(), 0); 
} 

일들 키보드가 작동하지 않습니다

imm가 처리되었습니다. 조각 추가 기능에서 다음

private InputMethodManager imm; 

조각 위치

선언 IMM을 : 이전에 나는 그래서 조각을 사용하고 같은

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    imm = (InputMethodManager) 
    getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
} 

그는 말한다 연구와 실패의 3 ~ 4 시간 후! !

고맙습니다 user_CC! IMM의 대상보기는 EDITTEXT과 같은 경우 :-)

+0

FWIW, 이것이 작동하는 첫 번째 코드 스 니펫 이었음을 확신하기 전에 이것을 두 번 읽어야했습니다. 첫 번째 스 니펫 위에 "WORKS :"를 붙이고 두 번째 스 니펫 위에는 "작동하지 않음 :"을 더하면 더 명확했을 것입니다. – ToolmakerSteve

0

ShowSoftInput 작동합니다. imm.isActive(editText) 또는 editText.isInputMethodTarget()으로 확인할 수 있습니다.

ToggleSoftInput은 현재 imm 대상의 키보드를 토글합니다.

포커스가 editText.requestFocus()에 의해 변경된 후 imm 대상 뷰가 설정됩니다. 하나의 게시물 실행 파일로는 충분하지 않았기 때문에 이러한 두 작업간에 몇 가지 사후 프로세스가 있다고 생각합니다. 나는 더블 포스트를 테스트했고 나에게 도움이되었다.

editText.requestFocus(); 
editText.post(new Runnable() { 
    @Override 
    public void run() { 
     editText.post(new Runnable() { 
      @Override 
      public void run() { 
       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       if (imm != null) { 
        imm.showSoftInput(editText, 0); 
       } 
      } 
     }); 
    } 
});