AndroidのadjustResizeとadjustPanの違いは?


136

ソフトキーボードが表示されたときに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>

回答:


237

Androidデベロッパーサイトのリンク

「adjustResize」

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

「adjustPan」

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

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

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

1
素敵な返事をありがとう。現在、UIに問題があります。レイアウトの下部にedittextとボタンがあります。ソフトキーボードが表示されたら、ソフトキーボードの上に表示したい。どうすればこれを達成できますか?この問題の解決を手伝ってくれませんか?
androidcodehunter 2013

1
これは私のために働いていません。実際に私が欲しかったもの:Edittextフィールドに何かを書き込もうとするときに、ソフトキーボードの上にEdittextとButtonを表示したいだけです。私はあなたの解決策を試しましたが、うまくいきませんでした。
androidcodehunter 2013

おっと..それは私のために働いた..とにかく.. scrollviewを使用することは可能ですか
stinepike 2013

2
adjustResizeは、UIがサイズ変更に利用できる場合にのみソリューションを提供しますが、さらに5つのedittextを配置すると、機能しません。UIのサイズを変更できない場合に、ソフトキーボードの上にボタンと編集テキストを表示することは可能ですか?この問題をテストすると、実際に疑問が生じます。
androidcodehunter 2013

1
@support_msなぜ〜「replace adjustResize to adjustPan」が必要なのですか?
IgorGanapolsky

31

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

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


素晴らしい説明!
ヴラド

16

また、初心者のとき、adjustResizeとadjustPanの間で少し混乱していました。上記の定義は正しいです。
AdjustResize:メインアクティビティのコンテンツのサイズが変更され、ソフト入力、つまりキーボードの余地が作られます
AdjustPan:ウィンドウのコンテンツ全体のサイズを変更するのではなく、コンテンツをパンするだけなので、ユーザーは何を入力しているかを常に確認できます
AdjustNothing:名前が何も示唆していないようにサイズ変更またはパン。内容を非表示にしているかどうかに関係なく、そのままキーボードを開きます。

私は理解を深めるためにサンプルを作成しました
以下は私の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>

以下は、以下のxml AdjustResize例のデザインビューです。以下のAdjustPan例:以下のAdjustNothing例:
オリジナルビュー


adjustResizeの例


adjustPanの例


adjustNothingの例


9

ドキュメントも念頭に置いて、正しい値の組み合わせを保つと言います:

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

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

機能していない、画面がソフト入力の背後にある
MSD

6

あなたは使用することができますandroid:windowSoftInputMode="stateAlwaysHidden|adjustResize"あなたの現在の活動のためのAndroidManifest.xmlで、かつ使用android:fitsSystemWindows="true"スタイルやrootLayoutに。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.