[android:windowSoftInputMode] soft keyboard 설정 옵션들
android 2013. 3. 12. 16:41작성일 : 2013-03-12
작성자 : hanburn
1. android:windowSoftInputMode 이란?
Activity의 main window가 soft keyboard와 어떻게 interact 하는지 설정 할 수 있다.
설정할 수 있는 것은 2가지 이다.
첫째, 소프트키보드의 visible 상태를 설정
둘째, activity의 윈도우 조절 옵션 ( resize 하거나 pan 하거나 등등 )
아래에서는 state 계열과 adjust 계열의 속성으로 구분하였는데, 그 이유는.. 각 계열마다 하나의 속성만 정의 해야 한다. 만약 stat 계열의 속성을 복수로 지정하면 그 동작은 undefined 되어 있다고 한다. 복수로 지정할 수 있는 것은 stat 계열 1개와 adjust 계열 1개의 조합만 가능하다.
올바른 예
<activity android:windowSoftInputMode="stateVisible|adjustResize" >
잘못된 예
<activity android:windowSoftInputMode="stateVisible|adjustResize|stateHidden" >
위의 예처럼 state 계열은 visible 에 대한 것이므로 상반된 2개의 속성을 표시하면 안드로이드는 랜덤하게 동작하게 된다.
2. state 계열 속성
Value |
Description |
"stateUnspecified" |
soft keyboard 를 보일지 말지 정하지 않고, system 이 theme에 따라서 선택하도록 한다. 이 설정이 기본 설정값이다. |
"stateUnchanged" |
soft keyboard 가 마지막 상태를 유지하도록 한다. |
"stateHidden" |
soft keyboard 가 hidden 상태가 되게 한다. 다른 activity에서 back 버튼으로 활성화 되는경우보다 forward 로 활성화 되는 경우( 즉 새로 activity가 뜨는 경우) |
"stateAlwaysHidden" |
soft keyboard 가 항상 hidden 상태로 ( Activity의 main window가 foucus될때 ) |
"stateVisible" |
soft keyboard 가 visible 상태로 ( navigateing forward to ) |
"stateAlwaysVisible" |
soft keyboard 가 visible 상태로 ( 뒤로가기 제외 ) |
stateHidden은 다른 액티비티에서 뒤로가기 버튼으로 navigation 되었을때는 동작을 않하게 된다. 반면에 stateAlwaysHidden은 뒤로가기 버튼으로 해당 액티비티가 foreground 되어도 동작한다.
3. adjust 계열 속성
Value |
Description |
"adjustUnspecified" |
Resize 나 pan 을 정하지 않고 system이 설정에 따라서 자동으로 선택하게 한다. 기본 설정값이다. |
"adjustResize" |
화면의 soft keyboard에 맞춰서 항상 resize 되도록 한다. (EditText 이 안보일 수도 있음. ) |
"adjustPan" |
EditText 창을 가리지 않고, EditText 부분이 화면에 보이도록 레이아웃이 위로 스크롤된다. |
늘 그렇듯이 android의 developer page를 항상 참고해야 한다.
참고 : http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft
추가로 Keyboard가 가로모드시 화면을 모두 덮어 버리면, EditText의 android:imeOptions="flagNoExtractUI" 를 설정