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?

Jeremy Logan
fonte
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); 
Donal Rafferty
fonte
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.

mourngrym1969
fonte
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. :)

Uma corrida
fonte
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);
 }
Satheeshkumar Somu
fonte
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.

Ben
fonte
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"
sombrio
fonte
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.

Mohanraj SK
fonte
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?

dmazzoni
fonte
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

Xar-e-Ahmer Khan
fonte
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);
}
Mike Zriel
fonte
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 *

Ruchira
fonte