O softkey do Android nunca aparece no emulador

86

Sou novo no Android. Já passei duas horas procurando. O que quer que eu tente, o teclado virtual nunca é mostrado para oEditText . Eu crio simplesmente:

EditText editText = (EditText)findViewById(R.id.editText);

Eu tentei:

 editText.requestFocus();//i tried without this line too
 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

e:

editText.setOnFocusChangeListener(new OnFocusChangeListener() {

         @Override
         public void onFocusChange(View v, boolean hasFocus) 
         {    

                     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                     imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

         }
     });

eu também tentei:

getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);

eu tentei colocar esta linha em AndroidManifest.xml arquivo:

 android:windowSoftInputMode="stateVisible|adjustResize"

mas tudo em vão. Simplesmente nunca aparece. O que estou perdendo?

Andrey Chernukha
fonte
o teclado está abrindo em algum outro aplicativo?
Niranj Patel
tente substituir imm.showSoftInput (editText, InputMethodManager.SHOW_IMPLICIT); isso para imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, 0);
Aravin de
@CapDroid não, infelizmente. Tentei em outro aplicativo, mas ainda sem sorte
Andrey Chernukha
@Aravinth ainda não funciona
Andrey Chernukha
Você está usando emulador ou dispositivo.
Aravin de

Respostas:

211

Você precisa ter certeza de que seu emulador não está configurado para usar um teclado de hardware . Isso pode ser feito escolhendo Editum emulador selecionado no AVD. Em seguida, desmarque a Hardware keyboard presentconfiguração.

Você também pode tentar usar um emulador diferente, como Genymotion . Ele suporta aceleração total de hardware (CPU multi-core, bem como GPU) e é executado muito mais rápido do que qualquer uma das imagens do emulador Android. Se você usar o Genymotion, precisará desativar o teclado de hardware no Android (veja detalhes abaixo).

Para desativar o teclado de hardware no Genymotion:
Vá para Settings-> Language & inpute abra o Defaultitem em Keyboard & Input Methods. Há uma Hardwareconfiguração que você pode ativar / desativar. Quando está ligado, você usa seu teclado físico e quando está desligado o teclado virtual padrão deve aparecer sempre que um campo de texto recebe o foco.

Capturas de tela para as configurações do Genymotion: Item padrão

insira a descrição da imagem aqui

free3dom
fonte
4
Finalmente! Muito obrigado. Eu gostaria de poder votar duas vezes em sua resposta. Quanto ao Genymotion - uma vez, passei um dia tentando configurá-lo, mas não funcionou. Eu não pude nem escrever para o apoio deles
Andrey Chernukha
Fico feliz em ajudar :) Quanto ao Genymotion, eles estão constantemente melhorando, mas ainda é um preview / beta. No entanto, desde que comecei a usá-lo, não tive nenhum problema. Pode ser que eu só comecei com ele depois que eles resolveram a maioria dos problemas - ou eu estou apenas com sorte :). Dito isso, o (s) emulador (es) de android oferecem mais variação, então eu ainda os uso para testar a compatibilidade.
free3dom
Isso é ótimo, agora eu tenho teclado virtual! Mas eu tenho um EditText com android: inputType = "numberDecimal"> e o teclado virtual não escreve números (ele os escreve apenas se eu escrever uma letra antes deles). O corretor ortográfico já está desativado ...
Michele
Dê uma olhada aqui para possíveis soluções.
free3dom
@ free3dom ~ "abre o item Padrão em Métodos de teclado e entrada" O que é isso? Eu não vejo esse item.
IgorGanapolsky
73

Na versão 2.1.1 - clique nas configurações do dispositivo virtual - a seguir selecione a caixa de seleção "usar teclado virtual para digitar". insira a descrição da imagem aqui

insira a descrição da imagem aqui

Sharif
fonte
2

Existem dois locais para desmarcar o teclado de hardware no AS 1.1.0. Este não é suficiente:

insira a descrição da imagem aqui

Deve fazer isso (clique Tools | Android | AVD Manager ; em seguida, crie um novo ou edite o AVD antigo e clique em Show Advanced Settings; role para baixo e limpe Enable keyboard input):

insira a descrição da imagem aqui

DSlomer64
fonte
Passei um tempo procurando essa solução porque o indicador de rolagem normalmente desaparece e só aparece quando você começa a rolar. Eu recomendaria que, se uma exibição fosse rolável, houvesse alguma indicação dessa possibilidade visualmente.
GregM
Não funciona para mim no Android Studio. Desmarque a opção "Ativar entrada de teclado", mas o emulador ainda NÃO mostra o teclado do software.
Evgenii
Você mencionou apenas um "desmarcar". A outra é "Possui teclado físico", como mostrado - e provavelmente você também já o limpou. Talvez tente um dispositivo virtual diferente? Achei o emulador AS muito difícil de tolerar. Carregamento lento, peculiaridades como esta ... Boa sorte.
DSlomer64
2

O método para habilitar o teclado virtual na tela para emuladores Android Studio 2+ depende do nível de API do emulador. Testei os vários métodos começando com a API 15 e registrei as etapas abaixo.

[A] APIs 15, 17, 19 e 21.

As etapas a seguir habilitarão o teclado virtual na tela, mas desabilitarão a capacidade de inserir texto e interagir com o AVD usando o teclado de hardware do computador.

  1. No Android Virtual Device Manager (AVD), clique na ação de edição para o dispositivo com o qual deseja trabalhar
  2. Clique em Mostrar configurações avançadas e desça até a parte inferior da página até a seção "Teclado"
  3. Desmarque a opção "Ativar entrada de teclado"

[B] API 22

O teclado virtual é exibido independentemente do que você faça com as configurações do teclado de hardware. Se você deseja ativar o suporte para teclado de hardware junto com o teclado virtual,

  1. No AVD, clique na ação de edição para o dispositivo com o qual deseja trabalhar
  2. Clique em Mostrar configurações avançadas e desça até a parte inferior da página até a seção "Teclado"
  3. Marque a opção "Ativar entrada de teclado"

[C] API 23

Se você deseja usar o hardware e o teclado virtual, então ...

  1. Siga as [B] etapas 1 a 3
  2. No dispositivo virtual, abra Configurações e selecione Idioma e entrada / Teclado atual
  3. Habilitar Hardware - Mostrar método de entrada

Se você não precisa do teclado de hardware, nas configurações avançadas do AVD, desmarque a opção "Ativar entrada de teclado". Você não precisará alterar nenhuma configuração no dispositivo virtual.

[D] APIs 24 e 25

  1. Siga as [B] etapas 1 a 3 acima, marcando ou desmarcando a opção "Ativar entrada de teclado" dependendo se você deseja ativar o teclado físico.
  2. No dispositivo virtual, abra Configurações e selecione Idioma e entrada / Teclado físico
  3. Habilite "Mostrar teclado virtual"

Se a opção Ativar entrada de teclado foi selecionada no AVD, agora você poderá usar as entradas de teclado físico e virtual. Se você desmarcou a opção no AVD, o teclado virtual será exibido independentemente.

[E] API 26

Exatamente igual às [D] APIs 24 e 25, exceto que você precisa navegar por um nível de menu "Sistema" adicional nas configurações do dispositivo antes de acessar Idioma e entrada / Teclado físico

Will P
fonte
1

Pode ser que seu emulador não suporte softkeyboard.

Adicione uma propriedade de hardware Suporte de teclado e defina-o como verdadeiro para o seu emulador.

Se já for verdade, verifique esta resposta.

Niranj Patel
fonte
1

Mostrar:

EditText editText = (EditText) findViewById(R.id.myEdit);
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// only will trigger it if no physical keyboard is open
mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

E para esconder:

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(editText.getWindowToken(), 0);

Experimente este ...

FarhaSameer786
fonte
não ajudou, infelizmente
Andrey Chernukha
InputMethodManager imm = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); ... tente isto
FarhaSameer786
@Andrey Chernukha-eu acho que seu emulador não suporta softkeyboard ou o hardware do emulador não está funcionando corretamente .....
FarhaSameer786