Різниця між коригуваннямРазмер і коригуванняПан в андроїд?


136

Я намагався написати код, який використовується для зміни розміру компонентів інтерфейсу, коли з'являється програмна клавіатура . Коли я використовую prilagodResize, він змінює розмір компонентів інтерфейсу і змінює розмір, і в той же час коригуванняPan дає мені такий же вихід. Я хочу знати різницю між ними та коли використовувати кожен компонент? Який із них (налаштуванняПану чи налаштуванняРезмер) корисний для зміни розміру інтерфейсу користувача?

Ось мій 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

"скоригуватиРезмер"

Головне вікно діяльності завжди змінюється за розміром, щоб звільнити місце для м'якої клавіатури на екрані.

"коригуватиПан"

Головне вікно діяльності не змінюється, щоб звільнити місце для м'якої клавіатури. Швидше за все, вміст вікна автоматично панорумується, щоб поточна фокусія ніколи не була затемнена клавіатурою, і користувачі завжди можуть бачити, що вони набирають. Це, як правило, менш бажано, ніж зміна розміру, оскільки користувачеві може знадобитися закрити м'яку клавіатуру, щоб дістатись та взаємодіяти із затемненими частинами вікна.

відповідно до Вашого коментаря, використовуйте наступне у маніфесті своєї діяльності

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

1
дякую за гарну відповідь. Зараз у мене є проблема з моїм інтерфейсом користувача. У мене є текст редагування та кнопка внизу моєї верстки. Я хочу показати тих, хто знаходиться над програмною клавіатурою, коли з’явиться софт-клавіатура. Як я можу цього досягти. Чи можете ви допомогти мені вирішити цю проблему?
androidcodehunter

1
Це не працює для мене. Насправді те, що я хотів: я просто хочу показати Edittext і Button над програмною клавіатурою, коли я намагаюся щось написати в полі Edittext. Я спробував ваше рішення, але не працював.
androidcodehunter

ой .. це працювало для мене .. все одно .. чи можна використовувати прокрутку?
stinepike

2
fixResize надає рішення лише тоді, коли доступний інтерфейс для повторного розміру, але якщо я вставлю ще 5 редакційних тексту, він не може працювати. Чи можливо відобразити кнопку та редагувати текст над програмною клавіатурою, коли інтерфейс недоступний для зміни розміру. Насправді питання виникає, коли я тестую цю проблему.
androidcodehunter

1
@support_ms Чому потрібна ~ "замінити налаштуванняResize на коригуванняPan"?
ІгорГанапольський

30

prilagodResize = змінити вміст сторінки

prilagodPan = переміщення вмісту сторінки без зміни розміру вмісту сторінки


Дивовижне пояснення!
Влад

16

Я також був трохи плутаний між prilagodResize та prilagodPan, коли я був початківцем. Визначені вище визначення є правильними.
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>

Ось подання дизайну наведеного нижче прикладу AdjustResize xml : Приклад AdjustPan нижче: AdjustNothing Приклад нижче:
оригінальний вигляд


exampleResize приклад


приклад коригування


коригуватиНічий приклад


9

Як каже doc, також пам’ятайте про правильну комбінацію значень:

Налаштування повинно бути одним із значень, наведених у наступній таблиці, або комбінацією одного значення "стан ..." плюс одного значення "коригувати ...". Встановлення декількох значень у будь-якій групі - наприклад, декілька значень "стан ..." - має невизначені результати. Окремі значення розділені вертикальною смугою (|). Наприклад:

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

не працює, мій екран йде за м'яким входом
MSD

6

Ви можете використовувати android:windowSoftInputMode="stateAlwaysHidden|adjustResize"в AndroidManifest.xml для своєї поточної активності та використовувати android:fitsSystemWindows="true"стилі або rootLayout.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.