Emergencia automática del teclado en pantalla de Android


140

Una de mis aplicaciones tiene una "pantalla de apertura" (básicamente un menú) que tiene un EditTextseguimiento de varios Buttons. El problema es que varios de mis usuarios informan que cuando abren la aplicación, aparece automáticamente el teclado en pantalla sin siquiera tocar el EditText. Por lo que puedo decir, todos estos usuarios están usando el HTC Hero .

¿Es esto un error en 1.5? ¿Hay algo que pueda hacer al respecto?


1
Si es un error, probablemente esté específicamente en el Sprint Hero. Sprint tiene una versión con errores de Android en los Heros que venden y no parecen tener ninguna prisa por sacar las correcciones de errores. Hay toneladas de diferencias de comportamiento entre Sprint Heros y todos los demás dispositivos Android. Hasta donde yo sé, las otras versiones del héroe, como las de Europa, no tienen estos problemas.
Mark B

desafortunadamente, los Héroes aquí en Europa tienen problemas importantes, cambian según el número de compilación, pero hemos encontrado 3 a 4 errores importantes.
Donal Rafferty

Respuestas:


279

Puede usar la siguiente línea de código en el método onCreate de la actividad para asegurarse de que el teclado solo aparece cuando un usuario hace clic en EditText

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

Esto no funciona para mí (2.2 MyTouch 3G). En mi método onCreate (), llamo a setSoftInputMode (). EditText todavía hace que el teclado muestre :(
Nate

Esto funcionó para mí. Estoy ejecutando Android 2.3.4 y desarrollo usando <uses-sdk android: minSdkVersion = "3" />
Sandy

78
O android:windowSoftInputMode="stateHidden"
úsalo

Entonces, lo que me confunde es que tengo una actividad de inicio de sesión que ya parece estar ocultando bien el teclado. También he realizado una actividad de registro, pero el teclado aparece de forma predeterminada. Entonces, ¿cómo está evitando esto el inicio de sesión? No puedo encontrar el setSoftInputMode en la actividad de inicio de sesión, o el atributo windowSoftInputMode en la activity.xml.
Chucky

no siempre funciona: en algunos dispositivos, SOFT_INPUT_STATE_ALWAYS_HIDDEN provoca el error de que un texto de edición que no es el último en la actividad no puede hacer que aparezca el teclado virtual. El uso de "android: windowSoftInputMode =" stateHidden "" en el manifiesto también tiene el mismo efecto. los documentos del desarrollador indican que el teclado virtual no aparecerá automáticamente a menos que se vea obligado a hacerlo, pero eso es simplemente incorrecto.

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

Esto funciona para Android 3.0, 3.1, 3.2, 4.0 - Editor utilizado para compilar (Eclipse 3.7)

Coloque el 'windowSoftInputMode = "stateHidden"' en el archivo XML manifiesto de su aplicación para CADA actividad en la que desee que el teclado del software permanezca oculto. Esto significa que el teclado no aparecerá automáticamente y el usuario tendrá que 'hacer clic' en un campo de texto para que aparezca. Busqué durante casi una hora algo que funcionara, así que pensé en compartirlo.


La mejor solución que he encontrado hasta ahora. Enfoca el campo sin abrir el teclado. Funciona en Nexus S con 4.1.2
alexismorin

1
android: windowSoftInputMode = "stateHidden | ajustarNothing" también es útil si está utilizando fragmentos y no desea que el teclado cambie el diseño
whyoz

6

Agregue esto en su AndroidManifest.xml :

android:windowSoftInputMode="stateHidden|adjustResize"

Funciona perfectamente :)


1
Gracias por la respuesta. Lo siento, ¿cómo puedo llamar al teclado ahora? No aparecerá cuando llame requestFocus().
Takesi Tokugawa YD

6

Este código funcionará en todas las versiones de 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);
 }

Más 1 para saber qué aparece y qué no
Demon App Programmer

4

Agregue esto en el diseño primario del XML.

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

Asegura que el foco no esté en editText cuando comience la Actividad.


3

Puede usar esto en el método onCreate () de la actividad

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

o pegue este código en las etiquetas de actividad en AndroidManifest.xml

android:windowSoftInputMode="stateVisible"

2
Creo que te refieres a "stateHidden" en lugar de "stateVisible".
stevehs17

2

Puede agregar una sola línea de código en Android Mainfest.xml en la etiqueta de actividad

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

Esto puede ayudarte.


1

En esa versión de Android, cuando se infla una vista, el foco se establecerá en el primer control enfocable de forma predeterminada, y si no hay un teclado físico, aparecerá el teclado en pantalla.

Para solucionar esto, establezca explícitamente el foco en otro lugar. Si el foco se establece en otra cosa que no sea EditText, el teclado en pantalla no aparecerá.

¿Has intentado probar esto ejecutando Android 1.5 en el emulador?


Lo intenté en el emulador (y lo hice nuevamente para asegurarme de que no estaba loco). Actúa "bien" (lo que significa que no hay ventanas emergentes de teclado). Además, cuando originalmente escribí esto, mi G1 ejecutaba 1.5 y no actuaba de esta manera (cuando el teclado estaba "oculto").
Jeremy Logan el

Todavía apuesto a que tiene algo que ver con el enfoque inicial. Tal vez sea algo específico del HTC Hero, pero trataría de establecer el foco explícitamente en otra cosa y ver si eso lo soluciona para sus usuarios.
Mark B

¿Hay alguna forma de enfocar "nada"?
Jeremy Logan

1
Esto no funciona para mí (2.2 MyTouch 3G). En mi método onCreate (), llamo explícitamente requestFocus () en un botón, que es el segundo widget en la vista. EditText todavía hace que el teclado muestre :(
Nate

1

Puedes hacerlo programáticamente como

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

o establecer android:windowSoftInputMode="stateHidden"en el <activity taginteriorAndroidManifest.xml


1

Incluya esto donde las importaciones están en la parte superior:

import android.view.WindowManager;

Agregue este código en la 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);

* Esto es para Android.xamarin y FindFocus (): busca la vista en la jerarquía enraizada en esta vista que actualmente tiene foco, ya que tengo _enterPin.RequestFocus () antes del código anterior, por lo que muestra el teclado para _enterPin EditText *

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.