[Android] 키보드 뷰 가림 이슈 해결

명준쓰·2023년 9월 7일
0

문제 ->

특정 Fragment에서 EditText를 클릭해서 키보드가 올라올때
android:layout_alignParentBottom="true"
속성으로 선언된 버튼이 키보드 위에 가려지지 않고 올라와야함.

특정 이동 경로를 따르면 잘 작동하지만 그렇지 않으면 키보드가 올라올때 버튼이 같이 올라오지 않고 버튼을 가리는 이슈가 발생.

테스트

1. Manifests 설정

android:windowSoftInputMode="adjustResize" -> 해결 안됨
android:windowSoftInputMode="adjustPan" -> 해결안됨

-> 모든 프래그먼트에서 뷰를 밀면서 올라오는 이슈 발생

2. 프래그먼트 이동 경로 변경
MainActivity -> AFragment -> MainActivity에 선언된 BottomNavi B탭 클릭 -> BFragment -> CFragment 정상 작동
MainActivity -> ZFragment -> XFragment -> CFragment -> 정상 작동 X

자바파일에는 아무런 코드 x

같은 CFragment 여도 진입 경로에 따라 다른 동작 발생

추론 ->

같은 레이아웃 파일이 이동 경로에 따라 다른 동작이 발생하는것을 보니 stack과 관련된 문제라 생각.
tools -> Layout Inspector 를 켜서 뷰 계층 확인

쌓인 스택에 ScollView가 존재 유/무의 차이만 존재

결과 ->

해당 프래그먼트 or 하위 스택에라도 스크롤뷰가 존재해야만 키보드가 뷰를 가리지 않고 밀면서 올라옴.

해당 결과가 나온 이유(틀릴 수 도 있음) ->

ScrollView 내에서 키보드가 활성화될 때 Android 시스템은 adjustResize 옵션을 자동으로 적용하여 키보드에 의해 컨텐츠가 가려지지 않게 함.

Fragment는 스택 위에 쌓이며, 이전 Fragment는 백그라운드에 있을 수 있음. 만약 이전 Fragment에 ScrollView 또는 다른 스크롤 가능한 뷰가 있으면, 그것이 현재 표시되는 Fragment의 키보드 동작에 영향을 줌.

궁금 -> 하위 스택이 상위 스택에 영향을 끼칠 수 잇는 이유는 뭘까...?


https://developer.android.com/guide/topics/manifest/activity-element?hl=ko
https://developer.android.com/guide/components/activities/tasks-and-back-stack?hl=ko

profile
개린이

0개의 댓글