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