Aparência automática do teclado na tela do Android


140

Um dos meus aplicativos tem uma "tela de abertura" (basicamente um menu) EditTextseguida por vários Buttons. O problema é que vários dos meus usuários estão relatando que, quando abrem o aplicativo, ele abre automaticamente o teclado na tela sem que eles nem toquem no EditText. Até onde eu sei, todos esses usuários estão usando o HTC Hero .

Isso é um bug na versão 1.5? Existe algo que eu possa fazer sobre isso?


1
Se é um bug, provavelmente está no Sprint Hero especificamente. A Sprint tem uma versão de buggy do Android nos Heros que eles vendem e eles não parecem ter pressa de lançar correções para isso. Existem inúmeras diferenças de comportamento entre o Sprint Heros e todos os outros dispositivos Android. Tanto quanto sei, as outras versões do Hero, como as da Europa, não têm esses problemas.
Mark B

infelizmente, o herói aqui na Europa tem grandes problemas, eles mudam dependendo do número da compilação, mas encontramos 3 a 4 grandes bugs.
Donal Rafferty

Respostas:


279

Você pode usar a seguinte linha de código no método onCreate da atividade para garantir que o teclado apareça apenas quando um usuário clicar em um EditText

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

Isso não funciona para mim (2.2 MyTouch 3G). No meu método onCreate (), chamo setSoftInputMode (). O EditText ainda faz com que o teclado seja exibido :(
Nate

Isso funcionou para mim. Estou executando o Android 2.3.4 e desenvolvendo usando o <uses-sdk android: minSdkVersion = "3" />
Sandy

78
Ou use android:windowSoftInputMode="stateHidden"como aqui
Swato 10/10

Então, o que me confunde é que eu tenho uma atividade de login que já parece estar escondendo o teclado. Também fiz uma atividade de registro agora, mas o teclado está aparecendo por padrão. Então, como o login está evitando isso? Não consigo encontrar o setSoftInputMode na atividade de logon ou o atributo windowSoftInputMode no activity.xml.
Chucky 14/05

nem sempre funciona: em alguns dispositivos, SOFT_INPUT_STATE_ALWAYS_HIDDEN causa o erro de que um texto de edição que não seja o último da atividade não possa fazer com que o teclado virtual apareça. usar "android: windowSoftInputMode =" stateHidden "" no manifesto também tem o mesmo efeito. os documentos do desenvolvedor afirmam que o teclado virtual não aparecerá automaticamente, a menos que seja forçado, mas isso é completamente errado.

85
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Main"
              android:label="@string/app_name"
              android:windowSoftInputMode="stateHidden"
              >

Isso funciona para o Android 3.0, 3.1, 3.2, 4.0 - Editor usado para compilar (Eclipse 3.7)

Coloque 'windowSoftInputMode = "stateHidden"' no arquivo XML de manifesto do seu aplicativo para CADA atividade em que você deseja que o teclado do software permaneça oculto. Isso significa que o teclado não será ativado automaticamente e o usuário precisará 'clicar' em um campo de texto para trazê-lo. Eu procurei por quase uma hora por algo que funcionasse, então pensei em compartilhar.


Melhor solução que encontrei até agora. Foca o campo sem abrir o teclado. Funciona no Nexus S com 4.1.2
alexismorin

1
android: windowSoftInputMode = "stateHidden | adjustNothing" também é útil se você estiver usando fragmentos e você não quer o teclado para alterar o layout
whyoz

6

Adicione isso no seu AndroidManifest.xml :

android:windowSoftInputMode="stateHidden|adjustResize"

Funciona perfeitamente. :)


1
Obrigado pela resposta. Sinto muito, como posso ligar para o teclado agora? Não aparecerá quando ligar requestFocus().
Takesi Tokugawa YD

6

Este código funcionará em todas as versões do Android:

@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_login);

 //Automatic popping up keyboard on start Activity

     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

 or

 //avoid automatically appear android keyboard when activity start
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
 }

Mais 1 para dizer que aparece e que dosen't
Demônio App programador

4

Adicione isso no layout pai do XML.

android:focusable="true" 
android:focusableInTouchMode="true"

Ele garante que o foco não esteja no editText quando a Atividade for iniciada.


3

Você pode usar isso no método onCreate () da atividade

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

ou cole esse código nas tags de atividade no AndroidManifest.xml

android:windowSoftInputMode="stateVisible"

2
Eu acho que você quer dizer "stateHidden" em vez de "stateVisible".
precisa saber é o seguinte

2

Você pode adicionar a única linha de código no Android Mainfest.xml na tag de atividade

 <activity
        android:name="com.sams.MainActivity"
        android:windowSoftInputMode="stateVisible" >
 </activity>

isso pode ajudá-lo.


1

Nessa versão do Android, quando uma exibição é inflada, o foco é definido como o primeiro controle de foco por padrão - e se não houver teclado físico, o teclado na tela será exibido.

Para corrigir isso, defina explicitamente o foco em outro lugar. Se o foco estiver definido como algo diferente de um EditText, o teclado na tela não aparecerá.

Você já tentou testar isso executando o Android 1.5 no emulador?


Eu tentei no emulador (e apenas o fiz novamente para garantir que eu não estava louco). Ele age "certo" (ou seja, sem pop-up de teclado). Além disso, quando eu escrevi isso originalmente, meu G1 estava executando o 1.5 e não agia dessa maneira (quando o teclado estava "oculto").
Jeremy Logan

Eu ainda aposto que tem algo a ver com o foco inicial. Talvez seja algo específico para o HTC Hero, mas eu tentaria definir o foco explicitamente para outra coisa e ver se isso o corrige para os usuários.
Mark B

Existe alguma maneira de focar o "nada"?
Jeremy Logan

1
Isso não funciona para mim (2.2 MyTouch 3G). No meu método onCreate (), chamo explicitamente requestFocus () em um Button, que é o segundo widget na exibição. O EditText ainda faz com que o teclado mostre :(
Nate

1

Você pode fazer isso programaticamente como

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);

ou definido android:windowSoftInputMode="stateHidden"em <activity tagdentroAndroidManifest.xml


1

Inclua isso onde as importações estão no topo:

import android.view.WindowManager;

Adicione este código na parte OnCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ....
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

0
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
        imm.ShowSoftInput(_enterPin.FindFocus(), 0);

* Isso é para Android.xamarin e FindFocus () - ele procura a exibição na hierarquia enraizada nessa exibição que atualmente possui foco, pois eu tenho _enterPin.RequestFocus () antes do código acima, portanto, mostra o teclado para _enterPin EditText *

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.