Diferencia entre adjustResize y adjustPan en Android?


Traté de escribir un código que se utiliza para cambiar el tamaño de los componentes de la interfaz de usuario cuando aparece soft-keyboard. Cuando uso adjustResize,vuelve a dimensionar los componentes de la interfaz de usuario y al mismo tiempo adjustPan me dio la misma salida. Quiero saber la diferencia entre ellos y cuándo usar cada componente? ¿Cuál (adjustPan o adjustResize) es bueno para cambiar el tamaño de la interfaz de usuario?

Aquí está mi xml:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:orientation="vertical" >

            <EditText
                android:id="@+id/editText5"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="45dp"
                android:ems="10"
                android:inputType="textPersonName" />

            <Button
                android:id="@+id/button1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="40dp"
                android:text="My Button" />
        </LinearLayout>
    </RelativeLayout>

</ScrollView>

Y el archivo menifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.adjustscroll"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.adjustscroll.MainActivity"
            android:label="@string/app_name"
            android:windowSoftInputMode="adjustPan|adjustResize" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Author: androidcodehunter, 2013-07-01

4 answers

Desde el Enlace del Sitio para Desarrolladores de Android

"adjustResize"

La ventana principal de la actividad siempre se redimensiona para hacer espacio para el soft teclado en pantalla.

"adjustPan"

La ventana principal de la actividad no se redimensiona para hacer espacio para el soft teclado. Más bien, el contenido de la ventana se desplaza automáticamente para que el enfoque actual nunca se oscurezca por el teclado y los usuarios siempre se puede ver lo que están escribiendo. Esto es generalmente menos deseable que redimensionar, porque el usuario puede necesitar cerrar el teclado para llegar e interactuar con las partes ocultas de la ventana.

De acuerdo con su comentario, use lo siguiente en su manifiesto de actividad

<activity android:windowSoftInputMode="adjustResize"> </activity>
 160
Author: stinepike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-27 07:13:15

AdjustResize = redimensionar el contenido de la página

AdjustPan = mover el contenido de la página sin redimensionar el contenido de la página

 12
Author: Jayakrishnan PM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-08 03:06:53

Como doc dice también tenga en cuenta la combinación de valores correcta:

La configuración debe ser uno de los valores enumerados en la siguiente tabla, o una combinación de un "estado"... ajuste "valor más uno"..." valor. Establecer múltiples valores en cualquiera de los grupos-estado "múltiple"..." valor, por ejemplo - tiene resultados indefinidos. Los valores individuales están separados por una barra vertical (|). Por ejemplo:

<activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >
 8
Author: Tomask,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-19 16:26:56

Puedes usar android:windowSoftInputMode="stateAlwaysHidden|adjustResize" en AndroidManifest.xml para tu actividad actual, y use android:fitsSystemWindows="true" en estilos o RootLayout.

 5
Author: TTKatrina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-08 02:56:13