Perbedaan antara AdjustResize dan AdjustPan di Android?

141

Saya mencoba menulis kode yang digunakan untuk mengubah ukuran komponen UI ketika soft-keyboard muncul. Ketika saya menggunakan adjustResize, itu mengubah ukuran komponen UI dan pada saat yang sama menyesuaikanPan memberi saya keluaran yang sama. Saya ingin tahu perbedaannya dan kapan harus menggunakan setiap komponen? Manakah (AdjustPan atau AdjustResize) yang bagus untuk mengubah ukuran UI?

Ini xml saya:

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

dan file 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>
androidcodehunter
sumber

Jawaban:

244

Dari tautan Situs Pengembang Android

"AdjustResize"

Jendela utama aktivitas selalu diubah ukurannya untuk memberi ruang bagi keyboard lunak di layar.

"adjustPan"

Jendela utama aktivitas tidak diubah ukurannya untuk memberi ruang bagi keyboard lunak. Sebaliknya, konten jendela secara otomatis digeser sehingga fokus saat ini tidak pernah terhalang oleh keyboard dan pengguna selalu dapat melihat apa yang mereka ketik. Ini umumnya kurang diinginkan daripada mengubah ukuran, karena pengguna mungkin perlu menutup keyboard lunak untuk masuk dan berinteraksi dengan bagian jendela yang dikaburkan.

menurut komentar Anda, gunakan mengikuti dalam manifes aktivitas Anda

<activity android:windowSoftInputMode="adjustResize"> </activity>
tajam
sumber
1
terima kasih atas balasan Anda yang bagus. Sekarang saya mengalami masalah dengan UI saya. Saya memiliki teks edit dan tombol di bagian bawah tata letak saya. Saya ingin menunjukkan yang di atas soft-keyboard saat soft-keyboard muncul. Bagaimana saya bisa mencapai ini. Bisakah Anda membantu saya mengatasi masalah ini?
androidcodehunter
1
Ini tidak berhasil untuk saya. Sebenarnya yang saya inginkan: Saya hanya ingin menampilkan Edittext dan Button di atas soft-keyboard ketika saya mencoba menulis sesuatu di bidang Edittext. Saya mencoba solusi Anda tetapi tidak berhasil.
androidcodehunter
ups .. ini berhasil untuk saya .. lagian .. mungkinkah menggunakan scrollview?
tajam
2
AdjustResize hanya memberikan solusi ketika UI tersedia untuk ukuran ulang tetapi jika saya menambahkan 5 teks edit lagi maka itu tidak dapat berfungsi. Apakah mungkin untuk menampilkan tombol dan teks edit di atas soft-keyboard ketika UI tidak tersedia untuk diubah ukurannya. Sebenarnya pertanyaan muncul saat saya menguji masalah ini.
androidcodehunter
1
@support_ms Mengapa ~ "replace adjustResize to adjustPan" diperlukan?
IgorGanapolsky
38

AdjustResize = ubah ukuran konten halaman

AdjustPan = memindahkan konten halaman tanpa mengubah ukuran konten halaman

Jayakrishnan
sumber
Penjelasan yang luar biasa!
Vlad
24

Saya juga agak bingung antara AdjustResize dan AdjustPan saat masih pemula. Definisi yang diberikan di atas benar.
AdjustResize: Konten aktivitas utama diubah ukurannya untuk memberikan ruang bagi soft input yaitu keyboard
AdjustPan: Alih-alih mengubah ukuran keseluruhan konten jendela, itu hanya menggeser konten sehingga pengguna selalu dapat melihat apa yang dia ketik
AdjustNothing: Seperti namanya diubah ukurannya atau digeser. Keyboard dibuka terlepas dari apakah itu menyembunyikan isinya atau tidak.

Saya telah membuat contoh untuk pemahaman yang lebih baik
Di bawah ini adalah file xml saya:

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

Berikut adalah tampilan desain dari Contoh AdjustResize xml di bawah ini: Contoh AdjustPan di bawah ini: Contoh AdjustNothing di bawah ini:
tampilan asli


contoh adjustResize


contoh adjustPan


sesuaikan contoh tidak ada

Nadeem Shaikh
sumber
9

Seperti yang dikatakan dokter , ingat juga kombinasi nilai yang benar:

Setelan harus salah satu nilai yang tercantum dalam tabel berikut, atau kombinasi dari satu nilai "status ..." ditambah satu nilai "sesuaikan ...". Menetapkan beberapa nilai dalam salah satu grup - beberapa nilai "status ...", misalnya - memiliki hasil yang tidak ditentukan. Nilai individual dipisahkan oleh bilah vertikal (|). Sebagai contoh:

<activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >
Tomask
sumber
tidak berfungsi, layar saya berada di belakang soft input
MSD
6

Anda bisa menggunakan android:windowSoftInputMode="stateAlwaysHidden|adjustResize"di AndroidManifest.xml untuk aktivitas Anda saat ini, dan menggunakannya android:fitsSystemWindows="true"di styles atau rootLayout.

TTKatrina
sumber