2010-03-23 26 views
118

Una de mis aplicaciones tiene una "pantalla de inicio" (básicamente un menú) que tiene un EditText seguido de varios Button s. El problema es que varios de mis usuarios informan que cuando abren la aplicación, aparecen automáticamente en el teclado en pantalla sin que toquen el EditText. Por lo que puedo decir, todos estos usuarios están usando el HTC Hero.Teclado de Android en pantalla automático apareciendo

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

+1

Si se trata de un error, es probable que en el héroe Sprint específicamente. Sprint tiene una versión con errores de Android en el Heros que venden y no parece que tengan prisa por eliminar las correcciones de errores. Existen muchas 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. –

+0

desafortunadamente los héroes aquí en Europa tienen problemas importantes, cambian según el número de compilación, pero hemos encontrado entre 3 y 4 errores importantes. –

Respuesta

242

Usted puede usar la siguiente línea de código en el método onCreate de la actividad para asegurarse de que el teclado sólo aparece cuando un usuario hace clic en un EditarTexto

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

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

+0

Esto funcionó para mí. Estoy ejecutando Android 2.3.4 y desarrollando usando Sandy

+68

O uso 'android: windowSoftInputMode =" stateHidden "' como [aquí] (http: // stackoverflow .com/questions/2892615/how-to-remove-auto-focus-keyboard-popup-of-a-field-when-the-screen-shows-up/4454195 # 4454195) – Swato

1

En esa versión de Android, cuando una vista está inflada, el enfoque se establecerá en el primer control enfocable por defecto, y si no hay un teclado físico, aparecerá el teclado en pantalla.

Para solucionar esto, configure explícitamente el foco en otro lugar. Si el foco está configurado en cualquier cosa que no sea EditarTexto, el teclado en pantalla no aparecerá.

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

+0

Lo he probado en el emulador (y lo hice de nuevo para asegurarme de que no estaba loco). Actúa "a la derecha" (lo que significa que no aparece el teclado emergente). Además, cuando originalmente escribí esto, mi G1 estaba ejecutando 1.5 y no actuaba de esta manera (cuando el teclado estaba "oculto"). –

+0

Aún así, creo que tiene algo que ver con el enfoque inicial. Tal vez sea algo específico de HTC Hero, pero trataría de establecer el foco explícitamente a otra cosa y ver si eso lo arregla para sus usuarios. –

+0

¿Hay alguna forma de enfocar el "nada"? –

79
<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 'windowSoftInputMode = "stateHidden"' en el archivo XML de manifiesto de su aplicación para CADA actividad que desee que el teclado del software permanezca oculto. Esto significa que el teclado no aparecerá automáticamente yt El usuario tendrá que 'hacer clic' en un campo de texto para que aparezca. Busqué durante casi una hora algo que funcionó, así que pensé que podría compartirlo.

+0

No funcionó nada para la pestaña galaxy con Android 3.1 – Amt87

+0

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 | adjustNothing" también es útil si está utilizando fragmentos y no desea que el teclado cambie el diseño – whyoz

1

Puedes añadir el de una sola línea de código en Android Mainfest.xml bajo la etiqueta de actividad

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

esto puede le ayuda.

0

Puede hacerlo mediante programación como

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

o conjunto android:windowSoftInputMode="stateHidden" en <activity tag dentro AndroidManifest.xml

5

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); 
} 
5

Añadir esto en su AndroidManifest .xml:

android:windowSoftInputMode="stateHidden|adjustResize" 

Funciona perfectamente. :)

+0

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

3

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

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

o pega 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

+0

Esta debería ser la respuesta aceptada – efwjames

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

* Esto es para Android.xamarin y FindFocus() - se busca el punto de vista de la jerarquía con raíz en este punto de vista que en la actualidad tiene el foco, ya que tengo _enterPin.RequestFocus() antes de que el anterior código por lo que muestra el teclado para _enterPin EditarTexto *

0

Esto funcionó para mí:

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

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional con respecto a cómo y/o por qué resuelve el problema mejoraría el valor a largo plazo de la respuesta. –

Cuestiones relacionadas