Różnica między adjustResize i adjustPan w Androidzie?

Próbowałem napisać kod, który służy do zmiany rozmiaru komponentów UI, gdy pojawia się soft-keyboard. Kiedy używam adjustResize, to res-rozmiar UI komponentów i w tym samym czasie adjustPan dał mi to samo wyjście. Chcę poznać różnicę między nimi i kiedy używać każdego komponentu? Który z nich (adjustPan lub adjustResize) jest dobry do zmiany rozmiaru interfejsu użytkownika?

Oto mój 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>

I plik 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

From the Android Developer site link

"adjustResize"

Główne okno aktywności jest zawsze zmieniane, aby zrobić miejsce dla softu klawiatura na ekranie.

"adjustPan"

Główne okno aktywności nie jest zmieniane, aby zrobić miejsce dla softu klawiatura. Zamiast tego zawartość okna jest automatycznie przesuwana tak, że obecna ostrość nigdy nie jest zasłonięta przez klawiaturę i użytkowników zawsze widać co piszą. Jest to na ogół mniej pożądane niż zmiana rozmiaru, ponieważ użytkownik może potrzebować zamknąć miękką klawiaturę, aby wejdź i wejdź w interakcję z zasłoniętymi częściami okna.

Zgodnie z Twoim komentarzem, użyj następujących w manifeście aktywności

<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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-27 07:13:15

AdjustResize = zmiana rozmiaru zawartości strony

AdjustPan = przenoszenie zawartości strony bez zmiany rozmiaru

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-08 03:06:53

Jak mówi doc Należy również pamiętać o prawidłowej kombinacji wartości:

Ustawienie musi być jedną z wartości wymienionych w poniższej tabeli, lub połączenie jednego " stanu.../ align = "left" / .."wartość. Ustawienie wielu wartości w obu grupach-multiple " stan..."wartości, na przykład-ma niezdefiniowane wyniki. Poszczególne wartości są oddzielone przez pionowy pasek ( / ). Na przykład:

<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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-19 16:26:56

Możesz użyć android:windowSoftInputMode="stateAlwaysHidden|adjustResize" W AndroidManifest.xml dla bieżącej aktywności, i używać android:fitsSystemWindows="true" w stylach lub 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-08 02:56:13