Android UI interaction with soft keyboard

사용 언어: Kotlin 1.7.20
사용 버전: 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

댓글

이 블로그의 인기 게시물

Python urllib.parse.quote()

Python OpenCV 빈 화면 만들기

tensorflow tf.random.uniform()

Android Notification with Full Screen

KiCad 시작하기 2 (PCB 만들기)

Android Minimum touch target size

Python bs4.SoupStrainer()

KiCad 시작하기 4 (기존 회로도 수정 및 추가)

음악 총보(Score), 파트보(Part)

tensorflow tf.expand_dims()