teclado personalizar google gboard configurar como celular cambiar activar android

android - personalizar - Ajustar el diseño cuando el teclado está encendido



gboard (6)

Aquí hay una solución que funciona como la pantalla de inicio de sesión de Evernote:

Primero, defina una clase que será su LinearLayout especial como esta:

public class MyLayout extends LinearLayout { public MyLayout(Context context, AttributeSet attrs) { super(context, attrs); } public MyLayout(Context context) { super(context); } private OnSoftKeyboardListener onSoftKeyboardListener; @Override protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) { if (onSoftKeyboardListener != null) { final int newSpec = MeasureSpec.getSize(heightMeasureSpec); final int oldSpec = getMeasuredHeight(); if (oldSpec > newSpec){ onSoftKeyboardListener.onShown(); } else { onSoftKeyboardListener.onHidden(); } } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } public final void setOnSoftKeyboardListener(final OnSoftKeyboardListener listener) { this.onSoftKeyboardListener = listener; } public interface OnSoftKeyboardListener { public void onShown(); public void onHidden(); } }

Este diseño escucha para medir los cambios, y si las nuevas medidas son <que las anteriores, eso significa que parte de la pantalla es consumida por el teclado virtual.

Sin embargo, para que funcione, en tu manifiesto debes configurar android:windowSoftInputMode="adjustResize" para que el contenido android:windowSoftInputMode="adjustResize" tamaño y no solo se cambie.

Y todo el sistema funciona de la siguiente manera: Usted tiene su diseño:

<MyLayout id="layout"> <SomeImage id="image"/> <SomeText> <SomeInput> </MyLayout>

Es como la pantalla de inicio de sesión de evernotes. Entonces, en tu actividad:

((MyLayout)findViewById(R.id.layout)).setOnSoftKeyboardListener(new OnSoftKeyboardListener() { @Override public void onShown() { findViewById(R.id.image).setVisibility(View.GONE); } @Override public void onHidden() { findViewById(R.id.image).setVisibility(View.VISIBLE); } });

Luego ve a manifest.xml y establece

android:windowSoftInputMode="adjustResize"

Lo que sucederá es que cuando se muestre el teclado suave, ocultará la imagen y cambiará el tamaño del resto del contenido. (En realidad, puedes ver cómo se redimensiona el texto en Evernote)

La ocultación de la imagen es, por supuesto, una de las muchas cosas que puedes hacer. Pero debe tener cuidado, ya que los diferentes cambios de diseño también llamarán a OnMeasure.

Por supuesto, es una variante sucia. Necesita verificar los cambios de orientación, y el momento adecuado cuando realmente toma las medidas, y tal vez un poco más de lógica al comparar las nuevas especificaciones con las antiguas. Pero creo que esta es la única forma de hacerlo.

He visto en algunas aplicaciones que el diseño cambia cuando se muestra el teclado suave. Esto ciertamente no es adjustPan porque el diseño completo (probablemente el diseño interno) cambia, no solo el EditText actual. Esto es, por ejemplo, en la pantalla de inicio de sesión de Evernote. ¿Puedes decirme cómo fue esto?



Esto funcionó para mí ... Pero este es tu oncreate

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);



Utilice "adjustResize" en lugar de "adjustPan" en AndroidManifest.xml

<activity ... android:windowSoftInputMode="adjustResize" />

De la documentation :

"adjustResize"
La ventana principal de la actividad siempre se redimensiona para dejar espacio para el teclado virtual en la pantalla.

"adjustPan"
La ventana principal de la actividad no se redimensiona para dejar espacio para el teclado virtual. Más bien, el contenido de la ventana se panoramiza automáticamente para que el enfoque actual nunca se oculte por el teclado y los usuarios siempre pueden ver lo que escriben. En general, esto es menos conveniente que cambiar el tamaño, ya que el usuario puede necesitar cerrar el teclado virtual para acceder e interactuar con las partes oscuras de la ventana.


use la vista de desplazamiento en su diseño dentro del elemento principal y elimine la configuración ajustar o ajustar el tamaño del archivo de manifiesto. ScrollView en su diseño le brindará la funcionalidad gratuita para desplazarse por la bandeja o el diseño con el diseño dado y también protegerá su diseño para anular la barra de herramientas o la barra de acciones y tampoco ocultará los botones o campos de texto dentro del diseño. Recuerde que debe usar ScrollView dentro del diseño de la base, por lo que esta vista de desplazamiento funcionará como el diseño base para toda la pantalla. ejemplo

<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:fillViewport="true" android:scrollbarStyle="insideInset" android:scrollbars="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- Add here which you want --> </LinearLayout> </ScrollView>