Android Editar texto cubierto por el teclado en el segundo toque
Así que tengo un EditText que no se cubre por el teclado la primera vez. Entonces cuando usted cierra el teclado y golpea ligeramente el edittext otra vez cubre el edittext.
He pasado horas investigando este tema y he llegado a la conclusión de que tiene algo que ver con estas dos propiedades del texto de edición.
- Android: ¿Cómo emular una tapa del teclado?
- Qt Android: Al presionar "Hecho" no oculta el teclado
- Ocultar teclado al navegar de un fragmento a otro
- Botón para mostrar el teclado virtual?
- ¿Cómo escuchar la pulsación de teclas en el teclado suave?
android:inputType="number" android:gravity="center"
Si elimino uno de esos el adjustPan (como puesto en mi manifiesto) funciona todo el tiempo como se prometió. Parece ser un error de Android. Pero necesito ambas líneas en mi texto de edición. ¿Cuál es la mejor manera de resolver este problema?
Aquí hay una versión ligeramente condensada de xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorPrimary" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true"> <LinearLayout android:id="@+id/buttons_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="horizontal" android:weightSum="5"> <android.support.v7.widget.AppCompatButton android:id="@+id/generate_button" android:layout_width="match_parent" android:layout_height="@dimen/button_height" android:layout_marginBottom="@dimen/button_margin" android:layout_marginEnd="0dp" android:layout_marginLeft="@dimen/button_margin" android:layout_marginRight="0dp" android:layout_marginStart="@dimen/button_margin" android:layout_marginTop="@dimen/button_margin" android:layout_weight="1" android:background="@color/buttonColor" android:elevation="@dimen/button_elevation" android:foreground="?attr/selectableItemBackground" android:text="@string/generate" android:textColor="@color/colorPrimary" android:textSize="@dimen/generate_button_title_size" android:textStyle="bold" /> <android.support.v7.widget.AppCompatImageButton android:id="@+id/copy_button" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="@dimen/button_margin" android:layout_weight="4" android:adjustViewBounds="true" android:background="@color/buttonColor" android:elevation="@dimen/button_elevation" android:foreground="?attr/selectableItemBackground" android:padding="@dimen/button_margin" android:scaleType="fitCenter" android:src="@drawable/ic_copy" android:tint="@color/colorPrimary" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/buttons_layout" android:orientation="vertical" android:weightSum="10"> <GridLayout android:id="@+id/grid_layout" android:layout_width="match_parent" android:layout_height="0dp" android:layout_gravity="center" android:layout_weight="6" android:animateLayoutChanges="true"> </GridLayout> <TextView android:id="@+id/total_text_view" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:gravity="center" android:text="11" android:textSize="@dimen/toolbar_title_size" android:textStyle="bold" /> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_gravity="center" android:layout_weight="2" android:textColorHint="@color/textColorHint"> <EditText android:id="@+id/num_rolls_edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:hint="@string/number_of_rolls" android:inputType="number" android:maxLength="@integer/edit_text_max_length" android:maxLines="1" android:text="4" android:textColor="@color/textColor" android:textSize="@dimen/edit_text_text_size"/> </android.support.design.widget.TextInputLayout> </LinearLayout>
Esto es lo que debería parecer cada vez …
Aquí está lo que parece en el segundo toque actualmente (teclado cubre edittext) …
EDIT: He descubierto que el teclado funciona bien cuando se utiliza Android 7.0. No creo que funcione en nada por debajo de eso. ¿Fue esto un error que fue arreglado recientemente o algo así?
Además, he incluido android: windowSoftInputMode = "adjustPan | stateHidden" en mi aplicación y parte de la actividad de mi manifiesto, pero que no parece arreglarlo.
- ¿Cómo desactivar el bloqueo de teclado y mostrar una actividad al usuario cuando se dispara el receptor de SCREEN_ON?
- Cómo forzar el teclado con números en el sitio web para móviles en Android
- Cómo agregar scrollview a keyboardView en android
- ¿Cómo se muestra el teclado numérico en un EditText en android?
- Forzar el teclado abierto en android
- NumberPicker en AlertDialog siempre activa el teclado. ¿Cómo desactivar esto?
- Cómo excluir caracteres especiales del teclado de android para EditText
- Teclado virtual de Android 3.1 en modo de pantalla completa
Intente cambiar adjustPan
a adjustResize
para la configuración de la actividad en el archivo de manifiesto, tal y como sugirió el documento .
Esto (adjustPan) es generalmente menos deseable que el cambio de tamaño, porque el usuario puede necesitar cerrar el teclado suave para llegar e interactuar con partes oscurecidas de la ventana.
EDITAR
Si no desea que las vistas se aplasten / ajusten cuando se abre el teclado, agregue un ScrollView
a su raíz RelativeLayout
. De modo que cuando adjustResize
desplazará la vista en consecuencia en lugar de "aplastarlos".
¡Espero que esto ayude!
Agregue esto en su manifiesto para la actividad. Funciona bien
<activity android:name=".Views.UI.MainActivity" android:windowSoftInputMode="stateHidden|adjustResize">
En su primera captura de pantalla el texto "Dice" es cutoff, en el segundo, donde el editText está cubierto, "Dice" se muestra, considere quitar el Title editText "Dice"?
También veo que usted ha utilizado scrollView y dicho usted puede utilizar AlignParentBottom
, podría usted substituir eso por layoutBelow
?
Pienso que usted no utilizó la visión de la voluta dentro del XML si usted lo hizo que usted necesita hacer un cierto código android mainfeast. <activity android:name=".activity.ActivityProductDetail" android:windowSoftInputMode="stateAlwaysHidden|adjustResize" />
RelativeLayout
con alignParentBottom
y varias vistas siempre es problemático, especialmente con el teclado. Yo sugeriría usar scrollview
y agregar vistas dentro de LinearLayout
, donde los botones estarán al final, pero no seguramente en la parte inferior de la vista.
Entonces ni siquiera necesita usar adjustPan
. Algo como:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <!-- grid view + textview + textEdit + your buttons at the end --> </LinearLayout>
Usted podría agregar su disposición en ScrollView
y escuchar la devolución de llamada de onGloablLayout()
. Si el rootview y la diferencia de altura de su vista son> 100 píxeles probablemente sea el teclado y usted podría desplazarse a su EditText
por lo que no está bloqueado por el teclado.
final View layout = findViewById(R.id.layoutparentID); layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int heightDiff = layout.getRootView().getHeight() - layout.getHeight(); if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard... final Runnable r = new Runnable() { public void run() { scrollView.smoothScrollTo(0, editText.getBottom()); } }; activityRootView.getHandler().postDelayed(r, 100); } } });
Compruebe este código, ocultando el teclado virtual
try { View view = this.getCurrentFocus(); if (view != null) { InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } catch (Exception e) { e.printStackTrace(); }
- Retrofit 2 / OkHttp: Cancelar todas las solicitudes en ejecución
- Cambiar tamaño: Botón de radio de Android