Разница между adjustResize и adjustPan в android?

Я попытался написать код, который используется для изменения размера компонентов пользовательского интерфейса при появлении soft-keyboard. Когда я использую adjustResize,, он res-size компоненты пользовательского интерфейса, и в то же время adjustPan дал мне тот же результат. Я хочу знать разницу между ними и когда использовать каждый компонент? Какой из них (adjustPan или adjustResize) хорош для изменения размера пользовательского интерфейса?

Вот мой 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>

и файл манифеста:

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

Ответ 1

От сайта разработчика Android

"adjustResize"

Основное окно активности всегда изменяется, чтобы освободить место для мягкого клавиатуры на экране.

"adjustPan"

Основное окно операции не изменяется, чтобы освободить место для мягкого клавиатура. Скорее, содержимое окна автоматически разворачивается так что текущий фокус никогда не скрывается клавиатурой и пользователями всегда могут видеть, что они набирают. Это, как правило, менее желательно чем изменение размера, поскольку пользователю может потребоваться закрыть мягкую клавиатуру получить и взаимодействовать с затененными частями окна.

в соответствии с вашим комментарием, используйте следующее в манифесте активности

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

Ответ 2

Как doc говорит также, помните о правильной комбинации значений:

Параметр должен быть одним из значений, перечисленных в следующей таблице, или комбинация одного значения "состояние..." плюс одно значение "настроить...". Установка нескольких значений в каждой группе - несколько значений "состояние...", например, имеет undefined результаты. Отдельные значения разделены по вертикальной полосе (|). Например:

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

Ответ 3

adjustResize= изменить размер содержимого страницы

adjustPan= перемещение содержимого страницы без изменения размера содержимого страницы

Ответ 4

Вы можете использовать android:windowSoftInputMode="stateAlwaysHidden|adjustResize" в AndroidManifest.xml для текущей активности, и используйте android:fitsSystemWindows="true" в стилях или rootLayout.