在我们一般写登录、注册页面的时候,经常会因为软键盘弹出导致页面上移,导致布局被遮挡,用户体验很不好。
我们可以使用自定义Layout,动态判断layout是否改变,在根据权重进行适配。
class AdjustLayout(context: Context, attributes: AttributeSet) : LinearLayout(context, attributes) {
var keyboardShowed = false
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
super.onLayout(changed, left, top, right, bottom)
if (changed) {
val width = right - left
val height = bottom - top
if (height.toFloat() / width.toFloat() < 4f / 3f) { // 如果高宽比小于4:3说明此时键盘弹出
post {
loginBgLayout.visibility = View.INVISIBLE
val params = loginLayout.layoutParams as LayoutParams
params.weight = 1.5f
keyboardShowed = true
loginLayoutTop.requestLayout()
}
} else {
if (keyboardShowed) {
post {
loginBgWallLayout.visibility = View.VISIBLE
val params = loginLayout.layoutParams as LayoutParams
params.weight = 6f
loginLayout.requestLayout()
}
}
}
}
}
}