android - para - teclado samsung
¿Cómo evitar el teclado suave que empuja mi diseño? (7)
En mi caso, la razón por la que se presionaron los botones fue porque la vista sobre ellos era un ScrollView
, y se colapsó con los botones al teclado, sin importar el valor de android:windowSoftInputMode
que estaba configurando.
Pude evitar que mi fila inferior de botones fuera empujada por el teclado suave al configurar
android:isScrollContainer="false"
en el ScrollView
que se encuentra sobre los botones.
Esta pregunta ya tiene una respuesta aquí:
Tengo un conjunto de botones de navegación en la parte inferior de cada Actividad. En algunas actividades, necesito una vista de texto de búsqueda en la parte superior. Sin embargo, cada vez que el usuario escribe algo en la vista de texto, el teclado virtual siempre presiona mis botones de navegación, aunque en realidad no bloquea la vista de texto. Hace que mi interfaz de usuario se vea graciosa. ¿Cómo puedo forzar que mis botones de navegación permanezcan estáticos donde están sin que el teclado suave los presione? Intenté establecer el WindowSoftInputMode de la actividad, pero ninguna de las configuraciones me ayudó.
¿Alguna sugerencia? Gracias
Lo resolvió estableciendo el travieso EditText:
etSearch = (EditText) view.findViewById(R.id.etSearch);
etSearch.setInputType(InputType.TYPE_NULL);
etSearch.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
etSearch.setInputType(InputType.TYPE_CLASS_TEXT);
return false;
}
});
Para futuros lectores.
Quería un control específico sobre este tema, así que esto es lo que hice:
Desde un fragmento o actividad, oculte sus otras vistas (que no son necesarias mientras el teclado está activo) y luego resuélvalas para resolver este problema:
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
rootView.getWindowVisibleDisplayFrame(r);
int heightDiff = rootView.getRootView().getHeight() - (r.bottom - r.top);
if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
//ok now we know the keyboard is up...
view_one.setVisibility(View.GONE);
view_two.setVisibility(View.GONE);
} else {
//ok now we know the keyboard is down...
view_one.setVisibility(View.VISIBLE);
view_two.setVisibility(View.VISIBLE);
}
}
});
Para resolver esto simplemente agrega android:windowSoftInputMode="stateVisible|adjustPan
a esa actividad en el archivo de manifiesto de Android. Por ejemplo
<activity
android:name="com.comapny.applicationname.activityname"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateVisible|adjustPan"/>
Tuve el mismo problema y al principio agregué:
<activity
android:name="com.companyname.applicationname"
android:windowSoftInputMode="adjustPan">
a mi archivo manifiesto Pero esto solo no resolvió el problema. Entonces, como lo menciona Artem Russakovskii, agregué:
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:isScrollContainer="false">
</ScrollView>
en la vista de desplazamiento
Esto es lo que funcionó para mí.
Tuve el mismo problema, pero establecer windowSoftInputMode
no me ayudó, y no quería cambiar la vista superior para tener isScrollContainer="false"
porque quería que se desplazara.
Mi solución fue definir la ubicación superior de las herramientas de navegación en lugar de la parte inferior. Estoy usando titanio, así que no estoy seguro de cómo se traduciría esto a Android. La definición de la ubicación superior de la vista de herramientas de navegación evitó que el teclado virtual la empujara hacia arriba, y en su lugar cubrió los controles de navegación como yo quería.
windowSoftInputMode moverá o redimensionará el diseño de tu actividad. Una cosa que puede hacer es adjuntar un oyente de EnfoqueCambiado a su EditText y cuando el usuario selecciona / toca EditText, oculta o mueve sus botones de navegación fuera de la pantalla. Cuando EditText pierde el foco, puede volver a colocar los botones de navegación en la parte inferior de la actividad.