web-dev-qa-db-fra.com

Différence entre adjustResize et adjustPan dans Android?

J'ai essayé d'écrire un code qui est utilisé pour redimensionner les composants de l'interface utilisateur lorsque clavier virtuel apparaît. Lorsque j'utilise adjustResize,, il redimensionne les composants de l'interface utilisateur et, en même temps, adjustPan m'a donné le même résultat. Je veux savoir la différence entre eux et quand utiliser chaque composant? Lequel (adjustPan ou adjustResize) convient au redimensionnement de l'interface utilisateur?

Voici mon 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>

et le fichier 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>
112
androidcodehunter

Depuis le lien vers le site du développeur Android

"ajuster-redimensionner"

La fenêtre principale de l'activité est toujours redimensionnée pour laisser la place au clavier virtuel à l'écran.

"adjustPan"

La fenêtre principale de l'activité n'est pas redimensionnée pour laisser de la place au clavier virtuel. Au lieu de cela, le contenu de la fenêtre est automatiquement balayé afin que le focus actuel ne soit jamais masqué par le clavier et que les utilisateurs puissent toujours voir ce qu'ils tapent. Cela est généralement moins souhaitable que le redimensionnement, car l'utilisateur peut avoir besoin de fermer le clavier logiciel pour accéder aux parties obscurcies de la fenêtre et interagir avec elles.

en fonction de votre commentaire, utilisez ce qui suit dans votre manifeste d'activité

<activity Android:windowSoftInputMode="adjustResize"> </activity>
194
stinepike

adjustResize = redimensionner le contenu de la page

adjustPan = déplacer le contenu de la page sans le redimensionner

21
Jayakrishnan PM

Comme doc dit, gardez également à l'esprit la bonne combinaison de valeurs:

Ce paramètre doit correspondre à l'une des valeurs répertoriées dans le tableau suivant ou à la combinaison d'une valeur "state ..." et d'une valeur "ajuster ...". La définition de plusieurs valeurs dans l'un des groupes, par exemple plusieurs valeurs "d'état ...", entraîne des résultats non définis. Les valeurs individuelles sont séparées par une barre verticale (|). Par exemple:

<activity Android:windowSoftInputMode="stateVisible|adjustResize" . . . >
8
Tomask

Vous pouvez utiliser Android:windowSoftInputMode="stateAlwaysHidden|adjustResize" dans AndroidManifest.xml pour votre activité actuelle et utiliser Android:fitsSystemWindows="true" dans les styles ou rootLayout.

5
TTKatrina