소프트 키보드 팝업시 페이지 스크롤


99

나는이 <ScrollView>레이아웃 :

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_scrollview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/input_one"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_two"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_three"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

          <Button
            android:id="@+id/ok_btn"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="20dp"
            android:text="@string/ok_str" />

      </LinearLayout>
</ScrollView>

위에서 볼 수 있듯이 간단한 레이아웃은 3 개의 입력 필드와 "확인"버튼으로 구성됩니다.

위의 레이아웃으로 내 앱을 실행합니다. 첫 번째 입력 필드 ( @+id/input_one)를 탭 하면 소프트 키보드가 화면 하단에서 팝업되고 세 번째 입력 필드와 "확인"버튼 이 숨겨 집니다.

를 사용했기 때문에 소프트 키보드에 가려진<ScrollView> 세 번째 입력 필드와 "확인"버튼을보기 위해 페이지를 위로 스크롤 할 수 있다고 생각 했지만 페이지를 스크롤 할 수 없습니다 . 왜? 그것을 제거하는 방법? 기본적으로 소프트 키보드가 튀어 나와도 모든 입력 필드와 "확인"버튼을보고 싶습니다.


1
<ScrollView>를 제거하면 LinearLayout이 외부 레이아웃이어야하며 sofkeyboard가 팝업 되어도 작동하기를 바랍니다.
아비드 A. Chaudhary

1
@pakshaheen scrollview가 필요할 때 문제가 해결되지 않습니다.
Luten

여기에 작업 코드가 있습니다. stackoverflow.com/questions/7417123/…
Venkat

답변:


125

난에 다음과 같은 속성을 정의하여 문제를 해결 <activity>AndroidManifest.xml에

android:windowSoftInputMode="adjustResize"

12
stateVisible은 필요하지 않습니다. 그러면 사용자가 EditText에 집중하지 않아도 앱이
실행될

심지어 글고이없는 autometically 열려있는 키보드입니다
미스터 X

37

좋아, 나는 문제를 찾기 위해 몇 시간을 검색했고 그것을 찾았다.

어떤 변화도 나를 좋아 fillViewport="true"하거나 android:windowSoftInputMode="adjustResize"도움이 되지 않았습니다 .

저는 Android 4.4를 사용하는데 이것이 큰 실수입니다 .

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

어쨌든 전체 화면 테마는 SoftKeyboard가 표시 될 때 ScrollViews가 스크롤되는 것을 방지합니다.

현재 나는 이것을 대신 사용했습니다.

android:theme="@android:style/Theme.Black.NoTitleBar

시간 및 배터리 표시로 상단 시스템 표시 줄을 제거하는 방법을 모르겠지만 적어도 문제가 있습니다.

이것이 같은 문제를 가진 다른 사람들에게 도움이되기를 바랍니다.

편집 : 내 경우에 대한 약간의 해결 방법이 있으므로 여기에 게시했습니다 .

이것이 당신에게 효과가 있을지 확실하지 않지만, 당신이 이해하는 데 확실히 도움이 될 것이고, 몇 가지를 정리할 것입니다.

EDIT2가 : 여기 당신이 올바른 방향으로 이동 또는 당신의 문제를 해결하는 데 도움이 될 것입니다 또 다른 좋은 주제이다.


+1 제 경우에는 상태 표시 줄이 코드에서 타사 라이브러리에 의해 숨겨졌습니다. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
de.

@qweret 둘 다 필요하면 어떻게합니까? 전체 화면 및 스크롤.
Prabs 2017-04-26

@Prabs 해결책을 찾았습니까? 또한 전체 화면과 스크롤을 모두 원합니다.
Johny

@Johny Nope. 지금은 scrolling3이있는 활동을 제외한 전체 앱에 대해 전체 화면을 사용하고 있습니다.
Prabs

@Prabs 내가 생각한 유일한 해결책은 투명한 상태 표시 줄이 있지만 제 경우에는 API> = 16을 지원하고 싶기 때문에 문제가됩니다. 당신은 어떤 생각이 있습니까?
Johny

20

나를 위해 작동하는 유일한 것은 매니페스트의 활동 에이 속성을 넣는 것입니다.

android:windowSoftInputMode="stateHidden|adjustPan"

활동을 열 때 키보드를 표시하지 않고보기 하단과 겹치지 않도록합니다.


14

전체 화면 없음 모드에서 이와 같이 매니페스트 안에 넣으십시오.

android:windowSoftInputMode="stateVisible|adjustPan" 

당신의 매니페스트에서

<activity
    android:windowSoftInputMode="stateVisible|adjustPan"
    android:name="com.example.patronusgps.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

1
나는이 시도했지만 unfrotunately, 전혀 운이 ... 그러나, 루트 뷰는 없다 하지ScrollView 하지만이 RelativeLayout포함하는 LinearLayout다음 포함하는ScrollView
제임스 종광


8

이것을 확인하십시오.

<activity android:name=".Calculator"
    android:windowSoftInputMode="stateHidden|adjustResize" 
    android:theme="@android:style/Theme.Black.NoTitleBar">
</activity>

3

이것은 나를 위해 일했습니다.

android:windowSoftInputMode="adjustPan"

2

또한 프로그래밍 방식으로 수행하려면 활동의 onCreate에 아래 줄을 추가하십시오.

getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | 
            WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE );

1

다음 코드를 사용하여 문제를 해결할 수 있습니다.

 <activity
     android:name=".DonateNow"
     android:label="@string/title_activity_donate_now"
     android:screenOrientation="portrait"
     android:theme="@style/AppTheme"
     android:windowSoftInputMode="stateVisible|adjustPan">
 </activity>

17
답을 드리기 위해 그냥 코드를 게시하는 대신 코드가 무엇을하는지 설명해야합니다.
Angel Politis 2016-07-24

0

내가 시도한 가장 간단한 대답은 활동을 전체 화면으로 만드는 코드를 제거하는 것입니다. 내 활동을 전체 화면으로 만드는 책임이있는 다음과 같은 코드가 있습니다.

if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.KITKAT) {

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    }

나는 방금 내 코드를 제거했고 전체 화면으로 이것을 달성하려면 다른 방법을 시도해야하지만 완전히 잘 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.