【发布时间】:2021-08-24 08:13:45
【问题描述】:
当我点击 TextField 时,我需要向上滚动 UI 以向用户显示登录按钮,而不是将其隐藏在键盘后面。
我正在使用 RelocationRequester。
我正在使用它来检测键盘显示/隐藏事件:
fun listenKeyboard() {
val activityRootView =
(requireActivity().findViewById<View>(android.R.id.content) as ViewGroup).getChildAt(0)
activityRootView.viewTreeObserver.addOnGlobalLayoutListener(object :
ViewTreeObserver.OnGlobalLayoutListener {
private var wasOpened = false
private val DefaultKeyboardDP = 100
private val EstimatedKeyboardDP =
DefaultKeyboardDP + 48
private val r: Rect = Rect()
override fun onGlobalLayout() {
val estimatedKeyboardHeight = TypedValue
.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
EstimatedKeyboardDP.toFloat(),
activityRootView.resources.displayMetrics
)
.toInt()
activityRootView.getWindowVisibleDisplayFrame(r)
val heightDiff: Int = activityRootView.rootView.height - (r.bottom - r.top)
val isShown = heightDiff >= estimatedKeyboardHeight
if (isShown == wasOpened) {
return
}
wasOpened = isShown
keyboardVisibleState(isShown)
}
})
}
一旦键盘可见,我就调用relocationRequestor的bringIntoView()。
coroutineScope.launch {
delay(250)
relocationRequester.bringIntoView()
}
它的行为是随机的,在某些设备上运行而不在其他设备上运行。有没有更好的解决方案来处理这个问题?
【问题讨论】:
标签: android scroll android-jetpack-compose