java - studio - missing accessibility label where min sdk 17
Android edita el texto cubierto por el teclado en el segundo toque (7)
Agregue esto en su manifiesto para la actividad. Funciona bien
<activity android:name=".Views.UI.MainActivity"
android:windowSoftInputMode="stateHidden|adjustResize">
Así que tengo un EditText que no queda cubierto por el teclado la primera vez. Luego, cuando cierra el teclado y toca nuevamente el texto de edición, cubre el texto de edición.
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:inputType="number"
android:gravity="center"
Si elimino cualquiera de esos, ajustarPan (tal como figura 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 ser cada vez ...
Esto es lo que parece en el segundo toque actualmente (el teclado cubre el texto de edición) ...
EDIT: he descubierto que el teclado funciona bien cuando se usa 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" tanto en mi aplicación como en la actividad de mi manifiesto, pero eso no parece solucionarlo.
Compruebe este código, ocultando el teclado suave
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();
}
Creo que no usaste la vista de desplazamiento dentro de XML si lo hiciste de lo que necesitas para hacer algún código de mainfeast de Android. <activity android:name=".activity.ActivityProductDetail" android:windowSoftInputMode="stateAlwaysHidden|adjustResize" />
En su primera captura de pantalla, el texto "Dados" está cortado, en el segundo, donde está cubierto EditText, se muestra "Dice", considere eliminar el título editText "Dice"?
También veo que usaste scrollView y dijiste que puedes usar AlignParentBottom
, ¿podrías reemplazarlo con layoutBelow
?
Intente cambiar adjustPan
para adjustResize
para la configuración de la actividad en el archivo de manifiesto, como lo sugirió el documento .
Esto (adjustPan) es generalmente menos conveniente que cambiar el tamaño, porque el usuario puede necesitar cerrar el teclado virtual para acceder e interactuar con partes oscuras de la ventana.
EDITAR
Si no desea que las vistas se trituren / ajusten cuando se abre el teclado, agregue un ScrollView
a su RelativeLayout
raíz. De modo que cuando adjustResize
desplazará la vista en consecuencia en lugar de "aplastarlos".
¡Espero que esto ayude!
Puede agregar su diseño en ScrollView
y escuchar la devolución de llamada de onGloablLayout()
. Si la vista de raíz y la diferencia de altura de la vista son> 100 píxeles, probablemente sea el teclado y se pueda desplazar a EditText
para que el teclado no lo bloquee.
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);
}
}
});
RelativeLayout
con alignParentBottom
y varias vistas siempre es problemático, especialmente con el teclado. 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>