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

로부터 안드로이드 개발자 사이트 링크

"adjustResize"

활동의 기본 창은 항상 화면의 소프트 키보드를위한 공간을 만들기 위해 크기가 조정됩니다.

"adjustPan"

활동의 기본 창은 소프트 키보드를위한 공간을 만들기 위해 크기가 조정되지 않습니다. 오히려 창 내용이 자동으로 이동되어 현재 포커스가 키보드에 의해 가려지지 않으며 사용자는 항상 입력 내용을 볼 수 있습니다. 일반적으로 크기를 조정하는 것보다 바람직하지 않습니다. 사용자가 소프트 키보드를 닫아야 창의 가려진 부분을 가져 와서 상호 작용할 수 있기 때문입니다.

귀하의 의견에 따라 활동 매니페스트에 다음을 사용하십시오.

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

1
좋은 답변 감사합니다. 이제 UI에 문제가 있습니다. 레이아웃 하단에 편집 텍스트와 버튼이 있습니다. 소프트 키보드가 나타날 때 소프트 키보드 위에있는 것을 보여주고 싶습니다. 이것을 어떻게 달성 할 수 있습니까? 이 문제를 해결하도록 도와 줄 수 있습니까?
androidcodehunter

1
이것은 나를 위해 작동하지 않습니다. 실제로 내가 원하는 것 : Edittext 필드에 무언가를 쓰려고 할 때 소프트 키보드 위에 Edittext 및 Button을 표시하고 싶습니다. 귀하의 솔루션을 시도했지만 작동하지 않습니다.
androidcodehunter

죄송합니다 .. 그것은 나를 위해 일했다 .. 어쨌든 .. scrollview를 사용할 수 있습니까?
stinepike

2
adjustResize는 UI 크기를 조정할 수있는 경우에만 솔루션을 제공하지만 편집 텍스트를 5 개 더 넣으면 작동하지 않습니다. UI 크기를 조정할 수없는 경우 소프트 키보드 위에 버튼 및 편집 텍스트를 표시 할 수 있습니까? 이 문제를 테스트 할 때 실제로 문제가 발생합니다.
androidcodehunter

1
@support_ms 왜 ~ "adjustResize를 adjustPan으로 교체"해야합니까?
IgorGanapolsky 2016 년

30

adjustResize = 페이지 내용의 크기를 조정합니다

adjustPan = 페이지 내용의 크기를 조정하지 않고 페이지 내용 이동


멋진 설명!
Vlad

16

초보자 일 때 adjustResize와 adjustPan 사이에 약간 혼란 스러웠습니다. 위에 제공된 정의가 정확합니다.
AdjustResize : 기본 활동의 내용은 키보드와
같은 소프트 입력을위한 공간을 만들기 위해 크기가 조정 됩니다
: 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

으로 문서를 말한다 또한 마음에 올바른 값 조합을 계속 :

설정은 다음 표에 나열된 값 중 하나이거나 "state ..."값과 "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.