Android UI interaction with soft keyboard
사용 언어: Kotlin 1.7.20
사용 버전: Android Studio Dolphin 2021.3.1
안드로이드에서는 글자 입력 칸을 눌렀을 때, 보이는 키보드를 소프트 키보드라고 부릅니다. 이 소프트 키보드가 보이게 되면, 어쩔 수 없이 화면이 가려지게 됩니다. 이 가려지는 것을 설정할 수 있습니다. UI를 덮을 건지, UI 밑에 붙을 건지 등 상호 작용이 가능합니다. 소프트 키보드와 UI의 상호 작용을 알아봅시다.
적용할 수 있는 값들은 아래 사이트에서 확인 가능합니다.
https://developer.android.com/guide/topics/manifest/activity-element#wsoft
사용 버전: Android Studio Dolphin 2021.3.1
안드로이드 UI interaction with soft keyboard를 알아보겠습니다.
안드로이드에서는 글자 입력 칸을 눌렀을 때, 보이는 키보드를 소프트 키보드라고 부릅니다. 이 소프트 키보드가 보이게 되면, 어쩔 수 없이 화면이 가려지게 됩니다. 이 가려지는 것을 설정할 수 있습니다. UI를 덮을 건지, UI 밑에 붙을 건지 등 상호 작용이 가능합니다. 소프트 키보드와 UI의 상호 작용을 알아봅시다.
적용할 수 있는 값들은 아래 사이트에서 확인 가능합니다.
https://developer.android.com/guide/topics/manifest/activity-element#wsoft
Activity에 적용하는 것이라면 AndroidManifest.xml에서 간단하게 적용할 수
있습니다.
68 번째 줄처럼, android:windowSoftInputMode를 사용합니다.
하나하나 살펴봅시다.
stateUnspecified
실행 시, 보여줄지 숨길지 정하지 않은 상태입니다. 앱을 만들 때 기본으로
설정됩니다.
UI는 키보드가 올라간 만큼 같이 올라갑니다.
stateUnchanged
실행 시, 보이는 상태였으면 계속 보이게, 안 보이는 상태였으면 계속 안 보이게
합니다.
UI는 키보드가 올라간 만큼 올라갑니다.
stateHidden
실행 시, 키보드를 숨깁니다.
UI는 키보드가 올라간 만큼 올라갑니다.
stateAlwaysHidden
실행 시, 키보드를 숨깁니다.
UI는 키보드가 올라간 만큼 올라갑니다.
stateVisible, stateAlwaysVisible
실행 시, 키보드를 보입니다. (그런데, 설명과는 다르게 실행 시 보이지가
않네요)
UI는 키보드가 올라간 만큼 올라갑니다.
adjustUnspecified
기본으로 설정되는 값입니다. UI 위로 키보드를 띄울지, UI를 키보드만큼
올릴지를 설정하지 않은 상태입니다.
UI가 키보드만큼 올라갑니다.
adjustResize
UI를 항상 키보드만큼 위로 올립니다.
adjustPan, adjustNothing
키보드가 UI를 덮습니다.
'|'을 사용하여 두 가지 이상을 적용할 수 있습니다.
지금까지 Activity에서 사용하는 방법을 알아보았습니다.
지금부터는 Fragment에 적용하는 방법을 알아봅니다.
저는 bottomNavigation을 쓰기 때문에 bottom을 따로 불러왔습니다.
Android 30 보다 낮은 경우에는 requireActivity().window.setSoftInputMode로
설정해 줍니다.
여기에 WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE를 적어줍니다.
Android 30 보다 큰 경우에는 SOFT_INPUT_ADJUST_RESIZE가 Deprecated 되었기
때문에 조금 복잡합니다.
setDecorFitsSystemWindows()에 false를 적어줍니다.
setOnApplyWindowInsetsListener를 장착합니다.
ime의 높이를 가져오고, statusBars의 높이를 가져옵니다. 이것으로 setPadding에
값을 넣어주어 수동으로 Padding을 시켜줍니다.
BottomNavigationView가 MainActivity에 있어서 Fragment에서는 조정이 안 되나
봅니다. 그래도 BottomNavigationView를 제외한 나머지 View는 올라갔기 때문에
만족합니다.
카테고리: Android
댓글
댓글 쓰기
궁금한 점은 댓글 달아주세요.
Comment if you have any questions.