안드로이드 키보드 화면 밀림 - andeuloideu kibodeu hwamyeon millim

안드로이드 어플을 만들면서 키보드를 사용하게 설정하는 경우가 많이 있습니다. 숫자를 입력 해야 하는 경우나 글자를 입력 해야 하는 경우 EditText를 터치하면 키보드가 활성화 되는데요. 키보드가 활성화 되면 화면이 위로 밀려 올라가는 경우 어떻게 하면 화면이 위로 밀리는 현상이 없이 키보드가 활성화를 시킬 수 있는지 알아보도록 하겠습니다.

안드로이드 키보드 화면 밀림 - andeuloideu kibodeu hwamyeon millim

한동안 다른 일로 바빠서 어플 수정에 시간을 투자하지 못했는데 이번에 숫자 뽑기 어플에 음수를 입력하는 기능을 추가 하면서 키보드가 활성화 될 때 화면이 위로 밀리는 증상까지 수정을 하게 되었습니다.


화면이 위로 밀리는게 어떤 증상인지 알아보기

키보드가 활성화 되면 화면이 위로 밀리는게 무슨 말인지 모르실 수 있기 때문에 먼저 화면이 위로 밀리는게 어떤 경우인지 보고서 해결을 해봅시다.

키보드가 활성화 되지 않았을때 화면 입니다. 이 상태에서 키보드를 활성화 시켰을때 화면이 위로 밀리는 현상을 보도록 하겠습니다.

키보드가 활성화 되었습니다. 화면을 보시면 가운데 제외, 초기화, 뽑기 버튼을 포함한 아래쪽 레이아웃이 위로 밀려 올라와서 버튼 높이가 줄어든것이 보입니다. 제가 원했던 화면은 모든 화면이 밀리지 않고 키보드가 화면 위쪽으로 보여지는걸 원했는데 화면이 밀려 올라가니 이쁘지 않게보이고 있습니다.



어떻게 하면 화면이 위로 밀리지 않을까요

해결 방법은 간단했습니다. 코드 한줄만 추가하면 화면이 위로 밀리는 현상은 일어나지 않게 됩니다. AndroidManifest.xml 에서 키보드가 활성화 되는 액티비티에 android:windowSoftInputMode="adjustPan" 코드를 입력해 주게 되면 해결이 됩니다.

저는 MainActivity에서 키보드를 사용하기 때문에 MainActivity에 코드를 추가해 주었습니다. 코드를 입력하고 어플에서 확인을 해보면

코드를 추가하기 전에 화면이 위로 밀려서 가운데 버튼 높이가 줄어들어 이쁘지 않게 되었던 화면이 밀리는 증상 없이 키보드가 활성화 되는걸 확인 할 수 있었습니다. 생각보다 간단했던 해결 방법으로 오늘도 한 수 배웠네요. 안드로이드 어플을 만들다 보면 알지 못했던 방법을 알게 되면서 해결을 하는 재미를 느낄 수 있어서 코딩이 지루하지 않고 재미있게 느끼는게 아닐까 생각해 봅니다.

edittext에 메시지를 입력받는 것을 구현하다가, 입력을 위해 키보드가 떴을 때, 화면이 밀려 올라가 무엇을 입력하고 있는지 보이지 않는 현상이 발생했다.

해결방법은 AndroidManifest.xml 파일에

<application 

...android:windowSoftInputMode ="adjustNothing">

을 추가하고,

<activity android:name=".MainActivity" android:windowSoftInputMode="adjustNothing">

이것도 추가해주었더니 키보드 입력시 키보드만 올라오고 화면은 그대로 유지되었다. 

EditText나 웹뷰에서 키보드(키패드)가 올라올때 화면이 작아진다든지 키보드에 가려져서 안보이는 현상이 발생 합니다.

이럴때 Layout 은 그대로 있고 화면을 밀어 올려 자연스럽게 입력 할 수 있는 상태로 바꿀 수 있는 방법에 대해 알아봅시다.

2가지 방법 중 하나의 방법으로 선택하여 사용하시면 됩니다.

(EditText 에도 속성 추가하여 할 수 있지만 이 방법은 잘 사용하지 않아 제외 합니다.)

1) AndroidManifest.xml 의 Activity 에 키보드 속성 추가하는 방법  

 windowSoftInputMode 에 "adjustPan"을 추가합니다.

<activity android:name=".MainActivity"
                  android:screenOrientation="portrait"
                  android:windowSoftInputMode="adjustResize|adjustPan">   
</activity>

2) MainActivity.java에서 키보드 속성 추가하는 방법

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);


잘 사용하는 설정값이 adjustPan 입니다. 그외 설정 값에 대해서는 아래에 설명하도록 하겠습니다.

필요에 따라 사용해보시면 됩니다.

stateUnspecified : 키보드 디폴트 설정 값

stateUnchanged : 키보드 마지막 상태 유지

stateHidden : 사용자 액티비티 선택 시 키보드 숨김

stateAlwaysHidden : 액티비티 메인 윈도우가 입력 포커스를 가질 때 키보드는 항상 숨김

stateVisible : 사용자가 액티비티 메인 윈도우 앞으로 갈 때 키보드 숨김

stateAlwayVisible : 사용자가 액티비티 선택할 때 키보드 보여줌

adjustUnspecified : 스크롤 할 수 있는 레이아웃 화면을 가지고 있다면 윈도우 크기 재 조정, 메인 윈도우 디폴트 값

adjustResize : 스크린 키보드 공간을 만들기 위해 메인 윈도우 크기를 재 조정

adjustPan : 키보드 공간을 만들기 위해 메인 윈도우의 크기가 재조정 되지 않음

이번 포스팅에서는 안드로이드 소프트 키보드 설정에 대해 알아보자.

(특히 layout 을 조정하는 adjustXXX 를 자세히 보자!)

How to

◼ AndroidManifest.xml

<activity

android:name=".PhMainActivity"

android:windowSoftInputMode="adjustNothing">

activity>
​

◼ Java code

public class PhMainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);




getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_ADJUST_NOTHING);

}

}
​

adjustPan

소프트 키보드에 의해 EditText 가 가려지지 않도록 위쪽으로 이동.

하단 그림과 같이 위, 아래가 잘리게 된다.

안드로이드 키보드 화면 밀림 - andeuloideu kibodeu hwamyeon millim
안드로이드 키보드 화면 밀림 - andeuloideu kibodeu hwamyeon millim

adjustResize

소프트 키보드가 보이도록 공간을 확보하기 위해 activity window 을 resize 한다.

하단 그림과 같이 위, 아래 모두 표시된다.

안드로이드 키보드 화면 밀림 - andeuloideu kibodeu hwamyeon millim
안드로이드 키보드 화면 밀림 - andeuloideu kibodeu hwamyeon millim

adjustUnspecified

시스템이 상황에 맞게 'adjustPan' or 'adjustResize' 를 결정한다.

소프트 키보드의 기본 값이다.

adjustNothing

Layout 에 어떤 영향도 주지 않고 소프트 키보드가 올라온다.

하단 그림과 같이 EditText 까지 가릴 수 있다.

안드로이드 키보드 화면 밀림 - andeuloideu kibodeu hwamyeon millim
안드로이드 키보드 화면 밀림 - andeuloideu kibodeu hwamyeon millim

stateHidden

Acitivty 실행 시 키보드가 자동으로 올라오지 않는다.

stateAlwaysHidden

Acitivty 실행 시 항상 키보드가 자동으로 올라오지 않는다.

액티비티 이동 포함

stateVisible

Acitivty 실행 시 키보드가 자동으로 올라 온다.

EditText에 포커스 맞춰짐

stateAlwaysVisible

Acitivty 실행 시 항상 키보드가 자동으로 올라 온다.

EditText에 포커스 맞춰짐, 액티비티 이동 포함

stateUnchanged

키보드를 마지막 설정 상태로 유지 한다.

stateUnspecified

시스템이 적절한 키보드를 상태를 설정해 주거나 테마에 따라 설정 해준다.

소프트 키보드 상태의 기본 값이다.

Ref

  • windowSoftInput | Android Developers

<액티비티>  |  Android 개발자  |  Android Developers

Declares an activity (an Activity subclass) that implements part of the application's visual user interface. All activities must be represented by {@code } elements in the manifest file. Any that are not declared there will not be seen by the system…

developer.android.com

출처 :

https://parkho79.tistory.com/59