라이브 텍스트 필드의 키보드가 올라가면 아이폰과 동일하게 화면이 위로 밀려 올라가게 수정

This commit is contained in:
2026-02-04 16:47:19 +09:00
parent b62dba096b
commit 9e867c3e16

View File

@@ -47,6 +47,8 @@ import androidx.core.content.ContextCompat
import androidx.core.graphics.toColorInt import androidx.core.graphics.toColorInt
import androidx.core.graphics.withTranslation import androidx.core.graphics.withTranslation
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import coil.transform.CircleCropTransformation import coil.transform.CircleCropTransformation
@@ -219,6 +221,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
initAgora() initAgora()
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
applyKeyboardPanInsets()
onBackPressedDispatcher.addCallback(this, onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
this.roomId = intent.getLongExtra(Constants.EXTRA_ROOM_ID, 0) this.roomId = intent.getLongExtra(Constants.EXTRA_ROOM_ID, 0)
@@ -533,6 +536,24 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
} }
// endregion // endregion
private fun applyKeyboardPanInsets() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
return
}
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
val ime = insets.getInsets(WindowInsetsCompat.Type.ime())
val imeVisible = insets.isVisible(WindowInsetsCompat.Type.ime())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
v.translationY = if (imeVisible) -ime.bottom.toFloat() else 0f
insets
}
ViewCompat.requestApplyInsets(binding.root)
}
private fun secondToMillis(second: Float): Long { private fun secondToMillis(second: Float): Long {
return (second * 1000).toLong() return (second * 1000).toLong()
} }