¿Diferencia entre ajusteResizar y ajustarPan en Android?


136

Traté de escribir un código que se utiliza para cambiar el tamaño de los componentes de la interfaz de usuario cuando aparece el teclado virtual. Cuando uso ajustarResizar, cambia el tamaño de los componentes de la interfaz de usuario y al mismo tiempo ajustarPan me dio la misma salida. ¿Quiero saber la diferencia entre ellos y cuándo usar cada componente? ¿Cuál (ajustePan o ajusteResize) 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 manifiesto:

<?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>

Respuestas:


237

Desde el enlace del sitio para desarrolladores de Android

"ajustarResize"

La ventana principal de la actividad siempre cambia de tamaño para dejar espacio para el teclado virtual en la pantalla.

"ajustarPan"

La ventana principal de la actividad no cambia de tamaño para dejar espacio para el teclado virtual. Por el contrario, el contenido de la ventana se desplaza automáticamente para que el teclado nunca oscurezca el foco actual y los usuarios siempre puedan ver lo que están escribiendo. Esto generalmente es menos deseable que cambiar el tamaño, ya que el usuario puede necesitar cerrar el teclado virtual para acceder e interactuar con las partes oscurecidas de la ventana.

de acuerdo con su comentario, utilice el siguiente en su manifiesto de actividad

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

1
Gracias por tu buena respuesta. Ahora tengo un problema con mi interfaz de usuario. Tengo un texto de edición y un botón en la parte inferior de mi diseño. Quiero mostrar los que están sobre el teclado virtual cuando aparece el teclado virtual. Cómo puedo conseguir esto. Puedes ayudarme a resolver este problema?
androidcodehunter 01 de

1
Esto no está funcionando para mí. Realmente lo que quería: solo quiero mostrar Edittext y Button encima del teclado virtual cuando intento escribir algo en el campo Edittext. Intenté tu solución pero no funcionó.
androidcodehunter

uy ... funcionó para mí ... de todos modos ... ¿es posible usar scrollview?
stinepike 01 de

2
ajustarResize solo proporciona una solución cuando la interfaz de usuario está disponible para cambiar el tamaño, pero si pongo 5 textos de edición más, entonces no puede funcionar. ¿Es posible mostrar el botón y editar el texto sobre el teclado virtual cuando la IU no está disponible para cambiar el tamaño? En realidad, surge una pregunta cuando pruebo este problema.
androidcodehunter

1
@support_ms ¿Por qué ~ "Reemplazar ajustarResizar a ajustarPan" es necesario?
IgorGanapolsky

31

ajustarResizar = cambiar el tamaño del contenido de la página

ajustarPan = mover el contenido de la página sin cambiar el tamaño del contenido de la página


Impresionante explicación!
Vlad

16

También estaba un poco confundido entre ajusteResizar y ajustarPan cuando era un principiante. Las definiciones dadas arriba son correctas.
AdjustResize: el contenido de la actividad principal se redimensiona para hacer espacio para la entrada de software es decir teclado
AdjustPan: En lugar de cambiar el tamaño de los contenidos generales de la ventana, que sólo filtra el contenido para que el usuario pueda ver siempre lo que es él tecleando
AdjustNothing: Como su nombre indica nada es redimensionada o panorámica. El teclado se abre ya que es independiente de si está ocultando el contenido o no.

He creado un ejemplo para una mejor comprensión.
A continuación se muestra mi archivo xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:hint="Type Here"
        app:layout_constraintTop_toBottomOf="@id/button1"/>


    <Button
        android:id="@+id/button1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Button1"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/button2"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_marginBottom="@dimen/margin70dp"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Button2"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@id/button1"
        app:layout_constraintEnd_toStartOf="@id/button3"
        android:layout_marginBottom="@dimen/margin70dp"/>

    <Button
        android:id="@+id/button3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Button3"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/button2"
        android:layout_marginBottom="@dimen/margin70dp"/>
</android.support.constraint.ConstraintLayout>

Aquí está la vista de diseño del ejemplo xml AdjustResize a continuación: AdjustPan Ejemplo a continuación: AdjustNothing Ejemplo a continuación:
vista original


Ejemplo deizeResize


Ejemplo de ajustarPan


ajusteNada ejemplo


9

Como dice el documento , 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 valor de "estado ..." más un valor de "ajuste ...". Establecer múltiples valores en cualquier grupo, por ejemplo, múltiples valores de "estado ...", tiene resultados indefinidos. Los valores individuales están separados por una barra vertical (|). Por ejemplo:

<activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >

no funciona, mi pantalla va detrás de la entrada suave
MSD

6

Puede usarlo android:windowSoftInputMode="stateAlwaysHidden|adjustResize"en AndroidManifest.xml para su actividad actual, y usarlo android:fitsSystemWindows="true"en estilos o rootLayout.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.