web-dev-qa-db-ja.com

AndroidのadjustResizeとadjustPanの違いは?

soft-keyboardが表示されたときにUIコンポーネントのサイズを変更するために使用されるコードを記述しようとしました。 adjustResize、を使用すると、UIコンポーネントのサイズが変更され、同時にadjustPanによって同じ出力が得られます。それらの違いと、各コンポーネントをいつ使用するかを知りたいですか? UIのサイズ変更に適しているのは、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>
106

Android Developer Site link から

"adjustResize"

アクティビティのメインウィンドウは、画面上のソフトキーボード用のスペースを確保するために常にサイズ変更されます。

"adjustPan"

アクティビティのメインウィンドウは、ソフトキーボード用のスペースを確保するためにサイズ変更されません。むしろ、ウィンドウのコンテンツは自動的にパンされるため、現在のフォーカスがキーボードによって隠されることはなく、ユーザーは入力内容を常に見ることができます。これは、ユーザーがソフトキーボードを閉じてウィンドウの不明瞭な部分にアクセスしたり、操作したりする必要があるため、一般にサイズ変更よりも望ましくありません。

あなたのコメントによると、あなたの活動マニフェストで以下を使用してください

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

adjustResize =ページコンテンツのサイズを変更する

adjustPan =ページコンテンツのサイズを変更せずにページコンテンツを移動する

19
Jayakrishnan PM

doc が言うように、正しい値の組み合わせにも留意してください:

設定は、次の表にリストされている値のいずれか、または1つの「状態...」値と1つの「調整...」値の組み合わせにする必要があります。いずれかのグループに複数の値(たとえば、複数の "state ..."値)を設定すると、結果は未定義になります。個々の値は縦棒(|)で区切られます。例えば:

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

現在のアクティビティにAndroidManifest.xmlでAndroid:windowSoftInputMode="stateAlwaysHidden|adjustResize"を使用し、スタイルまたはrootLayoutでAndroid:fitsSystemWindows="true"を使用できます。

5
TTKatrina