Estou mostrando uma caixa de entrada usando AlertDialog
. O EditText
interior da caixa de diálogo é automaticamente focado quando ligo AlertDialog.show()
, mas o teclado virtual não é mostrado automaticamente.
Como faço para que o teclado virtual apareça automaticamente quando a caixa de diálogo é exibida? (e não há teclado físico / hardware). Assim como quando pressiono o botão Pesquisar para invocar a pesquisa global, o teclado virtual é mostrado automaticamente.
android
keyboard
android-edittext
soft-keyboard
Randy Sugianto 'Yuku'
fonte
fonte
Respostas:
Você pode criar um ouvinte de foco
EditText
no eAlertDialog
, em seguida, obter oAlertDialog
'sWindow
. A partir daí, você pode exibir o teclado virtual ligando parasetSoftInputMode
.fonte
final AlertDialog dialog = builder.create()
e,show
em seguida, no diálogo, em vez do construtor.Para mostrar o uso do teclado:
Para ocultar o uso do teclado:
fonte
Você pode solicitar um teclado virtual logo após criar a caixa de diálogo (teste no SDK - r20)
fonte
Eu tive o mesmo problema e resolvi-o com o seguinte código. Não tenho certeza de como ele se comportará em um telefone com teclado de hardware.
fonte
Encontrei este exemplo http://android-codes-examples.blogspot.com/2011/11/show-or-hide-soft-keyboard-on-opening.html . Adicione o seguinte código imediatamente antes
alert.show()
.fonte
ou
fonte
stateHidden
e quando detecto que o usuário está criando um novo item, eu exibi o teclado usando a linha de código que você mencionou. :) Mais uma vez obrigado.((Activity) context).getWindow()....
.Trechos de código de outras respostas funcionam, mas nem sempre é óbvio onde colocá-los no código, especialmente se você estiver usando um
AlertDialog.Builder
e seguido o tutorial oficial da caixa de diálogo porque ele não usafinal AlertDialog ...
oralertDialog.show()
.É preferível
Como SOFT_INPUT_STATE_ALWAYS_VISIBLE ocultará o teclado se o foco sair do EditText, onde SHOW_FORCED manterá o teclado exibido até que seja explicitamente dispensado, mesmo que o usuário retorne à tela inicial ou exiba os aplicativos recentes.
Abaixo está o código de trabalho para um AlertDialog criado usando um layout personalizado com um EditText definido em XML. Ele também define o teclado para ter uma tecla "go" e permite acionar o botão positivo.
alert_dialog.xml:
AlertDialog.java:
fonte
Bem, este é um post bastante antigo, ainda há algo a acrescentar.
Estes são 2 métodos simples que me ajudam a manter o teclado sob controle e funcionam perfeitamente:
Mostrar teclado
Ocultar teclado
fonte
getCurrentFocus()
?Activity
.Deixe-me apontar algumas informações adicionais para a solução de yuku, porque achei difícil fazer isso funcionar! Como obtenho o objeto AlertDialog do meu AlertDialog.Builder? Bem, é o resultado da minha
alert.show()
execução:fonte
Dê uma olhada nesta discussão que trata de ocultar e mostrar manualmente o IME. No entanto, meu sentimento é que, se um foco
EditText
não está trazendo o IME, é porque você está chamandoAlertDialog.show()
seuOnCreate()
ou algum outro método que é evocado antes da tela ser realmente apresentada. Movê-lo paraOnPostResume()
corrigi-lo nesse caso, acredito.fonte
Sim, você pode fazer com
setOnFocusChangeListener
isso irá ajudá-lo.fonte
Sei que essa pergunta é antiga, acho que usar uma função de extensão é uma maneira mais bonita de mostrar o teclado para um texto de edição
Aqui está o método que eu uso para mostrar o teclado para um edittext.
código kotlin: basta ligar
edittext.showKeyboard()
o código java:
fonte
Se alguém estiver recebendo:
Tente adicionar contexto à chamada getSystemService.
assim
fonte
A pergunta original diz respeito às caixas de diálogo e meu EditText está em uma exibição regular. De qualquer forma, suspeito que isso funcione também para a maioria de vocês. Então, aqui está o que funciona para mim (o método de classificação mais alta sugerido acima não fez nada para mim). Aqui está um EditView personalizado que faz isso (a subclasse não é necessária, mas achei conveniente para meus propósitos, pois eu também queria focar quando a exibição se tornar visível).
Na verdade, é praticamente o mesmo que a resposta dos boatos. Na verdade, eu não percebi a resposta dele, pois tinha zero votos positivos. Então eu estava prestes a comentar o post dele, mas teria sido muito longo, então acabei fazendo esse post de qualquer maneira. tidbeck ressalta que não tem certeza de como isso funciona com dispositivos com teclados. Posso confirmar que o comportamento parece ser exatamente o mesmo em ambos os casos. Sendo assim, no modo retrato, o teclado do software aparece e, na paisagem, não. Ter o teclado físico deslizado para fora ou não, não faz diferença no meu telefone.
Porque, I pessoalmente o comportamento um pouco estranho optei por usar:
InputMethodManager.SHOW_FORCED
. Isso funciona como eu queria que funcionasse. O teclado fica visível independentemente da orientação; no entanto, pelo menos no meu dispositivo, ele não aparece se o teclado do hardware tiver sido deslizado para fora.fonte
O problema parece ser que, como o local em que você digita o texto está oculto inicialmente (ou aninhado ou algo assim), o AlertDialog define automaticamente o sinalizador
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
ouWindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
para que as coisas não acionem uma entrada suave para aparecer.A maneira de corrigir isso é adicionar o seguinte:
fonte
tente usar:
fonte
Para mostrar o teclado, eu tive que fazer o seguinte
Android TextField: defina foco + entrada suave programaticamente
Essencialmente, a solução é a seguinte
Onde
ShowKeyboard
ficaApós uma entrada bem-sucedida, também oculto o teclado
fonte
Coloque esses métodos na sua classe Util e use em qualquer lugar.
Kotlin
Java
fonte
Eu criei boas funções de extensão kotlin-esqe, caso alguém esteja interessado
fonte
Esta é uma boa amostra para você:
fonte
Por que esta resposta - Como a solução acima mostrará o teclado, mas não desaparecerá se você clicar em outro lugar que não seja
EditText
. Então, você precisa fazer algo para fazer com que o teclado desapareça quandoEditText
perder o foco.Você pode conseguir isso executando as seguintes etapas:
Torne a visualização principal (visualização de conteúdo da sua atividade) clicável e focável, adicionando os seguintes atributos
Implementar um método hideKeyboard ()
Por fim, defina o onFocusChangeListener do seu edittext.
fonte
Isso é um pouco complicado. Eu fiz dessa maneira e funcionou.
1.Na primeira chamada para ocultar a entrada suave da janela. Isso ocultará a entrada programável se o teclado virtual estiver visível ou não fizer nada se não estiver.
2.Show sua caixa de diálogo
3.Em seguida, basta ligar para alternar a entrada suave.
código:
fonte
Tente isto
fonte
Tentei muitos, mas é isso que funcionou para mim (kotlin):
fonte
Olhando para https://stackoverflow.com/a/39144104/2914140 , simplifiquei um pouco:
É melhor que https://stackoverflow.com/a/11155404/2914140 :
porque quando você pressiona o botão Início e passa para a tela inicial, o teclado permanece aberto.
fonte
Eu chamo isso em onCreate () para mostrar o teclado automaticamente, quando entrei na Activity.
fonte