키보드가 올라왔을때 키보드 위로 특정 레이아웃을 올리고 싶을때가 있다.
매니페스트 파일이나 코드상으로 넣어도 화면 구조상 어려워서 원하는대로 동작하지 않을때가 있는데
아래와 같은 방법으로 해결 할 수 있다.
화면의 적당한 곳에 아래 코드를 적어준다. 이 코드를 Fragment 에서 사용했을때 기준이다.
ViewCompat.setOnApplyWindowInsetsListener(requireActivity().window.decorView.rootView) { _, insets ->
val sysBarInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars())
val imeHeight = insets.getInsets(WindowInsetsCompat.Type.ime()).bottom
updateViewPositionForKeyboard(imeHeight - sysBarInsets.bottom)
insets
}
private fun updateViewPositionForKeyboard(keyboardHeight: Int) {
val layoutParams = binding.키보드위로 올리고 싶은 레이아웃의 id.layoutParams as ConstraintLayout.LayoutParams
if (keyboardHeight > 0) {
layoutParams.bottomMargin = keyboardHeight
} else {
layoutParams.bottomMargin = 0
}
binding.키보드위로 올리고 싶은 레이아웃의 id.layoutParams = layoutParams
}
반응형
'Android' 카테고리의 다른 글
[다시 만들어보는 클린아키텍쳐] 모듈구성 편 (0) | 2024.08.12 |
---|---|
[다시 만들어보는 클린아키텍쳐] build-logic 편 (0) | 2024.07.31 |
[다시 만들어보는 클린아키텍쳐] 모듈분리 편 (1) | 2024.07.25 |
hilt에서 같은 타입의 객체에 대한 디펜던시를 주입할때 (0) | 2024.07.09 |
안드로이드에서 FFMPEG로 m3u8 to mp4 하기 (1) | 2023.12.02 |
Android Room Entity Relation (1) | 2023.12.02 |
라이브러리 배포 후 적용을 하려는데 NoClassDefFoundError ? (0) | 2023.11.16 |
eventFlow 방식으로 이벤트를 처리하고 있을 때 든 생각 (1) | 2023.07.05 |