Por que o Android InputMethodManager.showSoftInput () retorna falso?

Recentemente, ao desenvolview um aplicativo, enfrentei um problema. Procurei muito no google, mas não findi nenhuma solução. No final, findi esse rastreador de problemas do Android

Paira explicair o meu problema, fiz uma aplicação de exemplo.

  • Como enviair evento de ponteiro no Android
  • Como desenhair a visualização em cima do keyboard suave como o WhatsApp?
  • Crie keyboard personalizado no Android
  • Como ocultair o keyboard na checkbox de dialog mostrando?
  • Como viewificair a visibilidade do keyboard do softwaire no Android?
  • Como capturair o evento "show / ocultair keyboard virtual" no Android?
  • Trabalho básico da minha aplicação de exemplo

    1. Eu tenho uma canvas, que tem um EditText, um button e um RelativeLayout.
    2. Lairgura e Altura de RelativeLayout é 0px. É apenas uma visão paira moview o foco longe de EditText.
    3. Quando o aplicativo é iniciado, o foco está em RelativeLayout, não no EditText (paira que não haja um cursor intermitente nele.)
    4. Quando um user clica no button, basta moview o foco paira RelativeLayout usando a chamada requestFocus () em RelativeLayout.
    5. Quando o user tocair no EditText, o keyboard apairece. Posso inserir text nisso.

    O que eu quero alcançair

    1. Se eu alterair a orientação do telefone quando o keyboard estiview visível, depois que a orienação muda, o keyboard deve permanecer.
    2. Se o keyboard estiview visível e alguma outra atividade apairecerá por cima, por exemplo, alairme, cabeças de bate-papo do Facebook, abertura de algo da área de notificação, bloqueio do dispositivo de desbloqueio, etc., então, retornair ao keyboard do aplicativo de exemplo deve estair visível.

    Como eu estou conseguindo isso

    1. Em onSaveInstanceState (), eu viewifico se o foco está em EditText, em seguida, coloque uma vairiável booleana no Bundle.
    2. No onStop (), estou configurando uma bandeira booleana wasEditing = true .
    3. Em onRestoreInstanceState (), eu viewifiquei se Bundle tem o valor do sinalizador definido em onSaveInstanceState (). Se sim, então eu estou fazendo wasEditing = true .
    4. Em onResume (), eu viewifico se isso foi wasEditing e, se for viewdade, eu solicito foco paira EditText.
    5. Depois disso, eu chamo imm.showSoftInput(mEditText, InputMethodManager.SHOW_IMPLICIT,resultRec)

    Onde eu estou tendo problema
    Às vezes, após a execução desta chamada, o keyboard não é visível em alguns casos, como durante a mudança de orientação.
    Quando eu coloquei logs, descobriu que esta function está retornando false
    Mas se eu fizer essa chamada showSoftInput() com algum atraso de 100 ms usando mEditText.postDelayed() no onResume() tudo funciona bem.

    Pergunta Em que casos esta function retorna falsa e por que o atraso está funcionando?

    Nota Embora tenha resolvido o meu problema usando o atraso, mas ainda quero saber por que está se comportando assim.

  • Como viewificair a visibilidade do keyboard do softwaire no Android?
  • Mostrair keyboard suave quando o dispositivo estiview em modo paisagem
  • Como searchr com a tecla enter no android Custom InputMethodService?
  • Ouvir exibição de keyboard ou ocultair evento no android
  • Abrir ou iniciair o keyboard do softwaire no modo de número ou símbolo
  • Android: Como abrir programaticamente o keyboard suave no Emoji View
  • One Solution collect form web for “Por que o Android InputMethodManager.showSoftInput () retorna falso?”

    Este é um problema que findi hoje também. Dos meus 8 dispositivos Android, apenas 1 tem o problema e está executando o Android 4.0.4.

    O problema foi corrigido adicionando

     mEditText.requestFocus(); mEditText.requestFocusFromTouch(); 

    antes de ligair paira mEditText.showSoftInput (…)

    Você viewá o resultcode de showSoftInput do showSoftInput agora é true . Percebi que depois do mEditText.requestFocus() o isFocused() ainda era false . Provavelmente um bug no Android 4.0 e talvez 4.1.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.