Desejo mostrar automaticamente o teclado virtual quando um EditText
estiver focado (se o dispositivo não tiver um teclado físico) e tiver dois problemas:
Quando o meu
Activity
é exibido, o meuEditText
é focado, mas o teclado não é exibido, preciso clicar novamente nele para mostrar o teclado (ele deve ser exibido quando o meuActivity
for exibido).E quando clico em pronto no teclado, o teclado é descartado, mas o
EditText
foco permanece e você não quer (porque minha edição está concluída).
Para resumir, meu problema é ter algo mais parecido com o iPhone: que mantém o teclado sincronizado com o meu EditText
estado (focado / não focado) e, é claro, não apresenta um teclado virtual se houver um físico.
android
keyboard
focus
android-edittext
android-softkeyboard
Ludovic Landry
fonte
fonte
Respostas:
Para forçar o teclado virtual a aparecer, você pode usar
E para remover o foco
EditText
, infelizmente você precisa ter um manequimView
para capturar o foco.Eu espero que isso ajude
Para fechá-lo, você pode usar
Isso funciona para usá-lo em uma caixa de diálogo
fonte
yourEditText.requestFocus()
o descrito aqui: stackoverflow.com/questions/8991522/…Eu tive o mesmo problema. Imediatamente após a edição do Text VISIBILITY mudar de GONE para VISIBLE, tive que definir o foco e exibir o teclado virtual. Consegui isso usando o seguinte código:
Funciona para mim com atraso de 100ms, mas falhou sem demora ou com apenas um atraso de 1ms.
A parte comentada do código mostra outra abordagem, que funciona apenas em alguns dispositivos. Eu testei no SO versões 2.2 (emulador), 2.2.1 (dispositivo real) e 1.6 (emulador).
Essa abordagem me salvou muita dor.
fonte
EditText
. Para outras pessoas que estão lendo isso, em vez de criar um novo,Handler
também pode usar oView.postDelayed()
método noyourEditText
próprio widget.Para fazer com que o teclado apareça, use
Este método é mais confiável do que invocar o InputMethodManager diretamente.
Para fechá-lo, use
fonte
InputMethodManager
? (Por um lado, ele não funciona, ao contrário de solução de raukodraug.)Quando nada mais funcionar, force-o a ser mostrado :
E depois, se você deseja fechá-lo, em onPause (), por exemplo, você pode chamar:
fonte
O código a seguir é pilhado do código-fonte 4.1 do Google para o SearchView. Parece funcionar, também funciona em versões inferiores do Android.
Além disso, o código a seguir precisa ser adicionado à medida que o Controle / Atividade é criado. (No meu caso, é um controle composto, e não uma atividade).
fonte
setImeVisibility(hasFocus)
?android:windowSoftInputMode="stateAlwaysVisible"
-> no arquivo manifesto.edittext.requestFocus();
-> no código.Isso abrirá o teclado virtual no qual a edição de texto tem solicitação de foco à medida que a atividade é exibida.
fonte
manifest
também!Eu tive alguma sorte recente em alguns casos simples com o código abaixo. Eu não terminei todos os testes, mas ....
E pronto, o teclado aparece.
fonte
Você pode tentar forçar o teclado virtual a aparecer, ele funciona para mim:
fonte
Às vezes, a resposta de raukodraug não funciona. Eu fiz isso dessa maneira com algumas tentativas e erros:
E a parte EditText :
fonte
Para ocultar o teclado, use este:
e para mostrar o teclado:
fonte
onStart()
e usargetDialog().getWindow()
como alternativa agetActivity().getWindow()
.E para o Kotlin, basta usar estas extensões:
fonte
Para fragmento, verifique se está funcionando:
fonte
showSoftInput
não estava funcionando para mim.Imaginei que precisava definir o modo de entrada: (aqui no componente Activity no manifesto)
fonte
Acredite ou não, meu problema com o teclado virtual foi resolvido quando descobri que as animações de atividades podem desativar o teclado virtual. Quando você chama a intenção com o
e
Ele pode ocultar o teclado virtual e não há como mostrá-lo.
fonte
Eu tive o mesmo problema em várias situações diferentes, e as soluções que encontrei funcionam em algumas, mas não funcionam em outras, então aqui está uma solução combinada que funciona na maioria das situações que encontrei:
fonte
fonte
Combinei tudo aqui e para mim funciona:
fonte
Funcionou para mim. Você pode tentar com isso também para mostrar o teclado:
fonte
fragmento de código . . .
fonte
Kotlin
extensão para mostrar o teclado em foco.Essa é uma combinação de respostas anteriores, que são muito longas ou incompletas.
Esta extensão publica um executável na fila de mensagens que mostra o teclado virtual após solicitar o foco:
Chame-o de qualquer visualização, quando necessário posteriormente:
fonte
basta adicionar android: windowSoftInputMode = "stateHidden" no arquivo de manifesto ...
fonte
fonte
Dentro do seu manifesto:
android:windowSoftInputMode="stateAlwaysVisible"
- teclado lançado inicialmente.android:windowSoftInputMode="stateAlwaysHidden"
- teclado inicialmente oculto.Eu gosto de usar também
"adjustPan"
porque quando o teclado é iniciado, a tela se ajusta automaticamente.fonte
Basta adicionar esta linha na sua visualização EditText:
e TADA - o teclado começou a aparecer automaticamente!
Eu tive um problema semelhante e descobri esta solução simples e estranha.
Como já foi mencionado aqui pelo user3392439, a aparência do teclado em foco de alguma forma estranhamente conectada com a presença do componente de rolagem no arquivo XML.
Mesmo a presença de outra visualização EditText que compreende a linha acima mencionada no mesmo XML faz com que o teclado apareça, não importa qual dos EditTexts esteja atualmente focado.
Se você tiver pelo menos uma visualização visível que compreende o componente de rolagem em seu arquivo XML - o teclado aparecerá automaticamente em foco.
Se não houver rolagem - você precisará clicar em EditText para fazer o teclado aparecer.
fonte
requesFocus()
de dentro de um manipulador de cliques e esta é a única maneira que não seja uma explícita showSoftInput SHOW_FORCEDTodas as soluções fornecidas acima ( interação InputMethodManager no ouvinte OnFocusChangeListener.onFocusChange anexado ao seu EditText funcionarão bem se você tiver uma edição única na atividade.
No meu caso, tenho duas edições.
Observei que onFocusChange é acionado para tvX com hasFocus = true (teclado mostrado), mas depois para tvY com hasFocus = true (teclado oculto). No final, nenhum teclado estava visível.
A solução geral deve ter a instrução correta em "show keyboard if EditText text has focus"
fonte
Na seção onResume () da atividade, você pode chamar o método bringKeyboard ();
fonte
WidgetUtils.showKeyboard
? Essa é a parte mais importante aqui.Nenhuma das respostas funcionou para mim. Aqui está uma maneira simples.
Atrasou o método requestFocus () por 400ms.
fonte
Descobri um comportamento estranho, pois em um dos meus aplicativos o teclado virtual era exibido automaticamente ao entrar na atividade (existe um editText.requestFocus () no onCreate).
Ao aprofundar as descobertas, descobri que isso acontecia porque havia um ScrollView ao redor do layout. Se eu remover o ScrollView, o comportamento será o descrito na declaração original do problema: somente ao clicar no editText já focado, o teclado virtual será exibido.
Se não funcionar, tente inserir um ScrollView - é inofensivo de qualquer maneira.
fonte
Eu tive um problema semelhante ao usar animações de exibição . Então, eu coloquei um ouvinte de animação para garantir que eu esperasse a animação terminar antes de tentar solicitar um acesso de teclado no edittext exibido.
fonte
Estou de acordo com o raukodraug, portanto, usando em um swithview, você deve solicitar / um foco claro como este:
Saudações.
fonte