teclado studio programacion para pantalla ocultar mostrar edittext developer descargar desactivar como cerrar abrir android keyboard focus android-edittext

android - studio - teclado en pantalla descargar



Teclado emergente automático en la actividad de inicio (16)

android: windowSoftInputMode = "stateHidden | adjustResize"

Funcionando bien

Tengo una pregunta relativamente simple. Tengo una actividad con muchos EditText en ellos. Cuando abro la actividad, se enfoca automáticamente en el primer EditText y muestra el teclado virtual.

¿Cómo puedo prevenir esto?


Curiosamente, esta documentación https://developer.android.com/training/keyboard-input/visibility.html establece que cuando se inicia una actividad y se enfoca un campo de texto, el teclado virtual no se muestra (y luego continúa hasta le mostrará cómo mostrar el teclado si lo desea con algún código).

En mi Samsung Galaxy S5, así es como funciona mi aplicación (sin entrada de manifiesto o código específico), sin teclado virtual. Sin embargo, en un Lollipop AVD, se muestra un teclado suave, lo que contradice el documento anterior.

Si obtienes este comportamiento cuando pruebas en un AVD, es posible que quieras probar en un dispositivo real para ver qué sucede.


Encontré esta solución simple que funcionó para mí. Establezca estos atributos en su diseño principal:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mainLayout" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" >

Y ahora, cuando la actividad comience, este diseño principal se enfocará por defecto.

Además, podemos eliminar el enfoque de las vistas secundarias en tiempo de ejecución volviendo a enfocar el diseño principal, como este:

findViewById(R.id.mainLayout).requestFocus();

Espero que funcione para ti.


Esto ocurre cuando EditText recibe Foco automáticamente cuando comienza la actividad. Entonces, una manera fácil y estable de arreglar esto, es simplemente establecer el foco inicial en cualquier otra vista, como un Botón, etc.

Puede hacer esto en su diseño XML, sin código requerido.


Esto tiene algunas buenas respuestas en la siguiente publicación: Evite que EditText se concentre en el inicio de la actividad . El que uso regularmente es el siguiente código de Morgan :

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus --> <LinearLayout android:focusable="true" android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"/> <!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component to prevent the dummy from receiving focus again --> <AutoCompleteTextView android:id="@+id/autotext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:nextFocusUp="@id/autotext" android:nextFocusLeft="@id/autotext"/>

NOTA: El ítem ficticio tiene que ser COLOCADO A LA DERECHA ANTES del elemento enfocable.

Y creo que debería funcionar perfectamente incluso con ScrollView y tampoco he tenido problemas de accesibilidad para esto.


Puede agregar esto a su actividad Manifest de Android:

android:windowSoftInputMode="stateHidden|adjustResize"


Si su vista tiene EditText y Listview, entonces el Teclado se abrirá de manera predeterminada. Para ocultar que el teclado aparezca por defecto, haga lo siguiente

this.listView.requestFocus();

Asegúrese de estar solicitando enfoque en la vista de lista después de obtener vista para editText.

Por ej.

this.listView = (ListView) this.findViewById(R.id.list); this.editTextSearch = (EditText) this.findViewById(R.id.editTextSearch); this.listView.requestFocus();

Si lo haces, entonces EditText obtendrá el foco y aparecerá el teclado.


Si tiene otra vista de su actividad como ListView , también puede hacer:

ListView.requestFocus();

en su onResume () para tomar el foco del editText .

Sé que esta pregunta ha sido respondida, pero solo brindé una solución alternativa que funcionó para mí :)


Tengo varias implementaciones descritas aquí, pero ahora he agregado en AndroidManifest.xml para mi Activity la propiedad:

android:windowSoftInputMode="stateAlwaysHidden"

Creo que esta es la manera fácil, incluso si está utilizando fragments .

" stateAlwaysHidden " El teclado stateAlwaysHidden siempre está oculto cuando la ventana principal de la actividad tiene un foco de entrada.


Tuve un problema similar, incluso al cambiar de pestaña, el teclado apareció automáticamente y se mantuvo activo, con Android 3.2.1 en una tableta. Utiliza el siguiente método:

public void setEditTextFocus(EditText searchEditText, boolean isFocused) { searchEditText.setCursorVisible(isFocused); searchEditText.setFocusable(isFocused); searchEditText.setFocusableInTouchMode(isFocused); if (isFocused) { searchEditText.requestFocus(); } else { InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(searchEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS ); } }

En onCreate () y onPause () de la actividad para cada EditText:

setEditTextFocus (myEditText, false);

Para cada EditText y OnTouchListener:

myEditText.setOnTouchListener(new EditText.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { setEditTextFocus(myEditText, true); return false; } });

Para cada EditText en OnEditorActionListener :

myEditText.setOnEditorActionListener(new EditText.OnEditorActionListener() { @Override public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) { ....... setEditTextFocus(myEditText, false); return false; } });

Y para cada EditText en el layout xml :

android:imeOptions="actionDone" android:inputType="numberDecimal|numberSigned" // Or something else

Probablemente haya más optimización de código posible.


Use esto en el código de su actividad:

@Override public void onCreate(Bundle savedInstanceState) { getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); }


Use estos atributos en su etiqueta de diseño en archivo XML:

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

Según lo informado por otros miembros en los comentarios, no funciona en ScrollView por lo tanto, debe agregar estos atributos al elemento secundario principal de ScrollView .


esta es la solución que estoy usando, no es la mejor solución, pero me está funcionando bien

editComment.setFocusableInTouchMode(false); editComment.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub editComment.setFocusableInTouchMode(true); editComment.requestFocus() ; return false; }});


La respuesta aceptada no funciona para mí, es por eso que dar una solución de trabajo de respuesta, ¡puede ser útil!

EditText edt = (EditText) findViewById(R.id.edt); edt.requestFocus(); edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0)); edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));

Ahora el teclado está abierto, disfruta :)


https://.com/a/11627976/5217837 Esto es casi correcto:

@Override public void onCreate(Bundle savedInstanceState) { getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); }

Pero debería ser SOFT_INPUT_STATE_HIDDEN en lugar de SOFT_INPUT_STATE_ALWAYS_VISIBLE


((InputMethodManager)getActivity().getSystemService("input_method")).hideSoftInputFromWindow(this.edittxt.getWindowToken(), 0);