我在一个RelativeLayout中有几个设置了align bottom属性的元素,当软键盘弹出时,这些元素被软键盘遮盖了。
我希望它们能够往上移,以便在屏幕空间足够的情况下显示在键盘上方,或者使键盘上方的区域可滚动,用户仍然可以看到这些元素。
有关于如何解决这个问题的任何想法吗?
我在一个RelativeLayout中有几个设置了align bottom属性的元素,当软键盘弹出时,这些元素被软键盘遮盖了。
我希望它们能够往上移,以便在屏幕空间足够的情况下显示在键盘上方,或者使键盘上方的区域可滚动,用户仍然可以看到这些元素。
有关于如何解决这个问题的任何想法吗?
好的,虽然有点晚了,但我发现如果在编辑文本下面添加一个列表视图,那么键盘将移动该编辑文本下面的所有布局而不会移动列表视图。
<EditText
android:id="@+id/et"
android:layout_height="match_parent"
android:layout_width="match_parent"
/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"//can make as 1dp
android:layout_below="@+id/et" // set to below editext
android:id="@+id/view"
>
**<any layout**
这是唯一对我有效的解决方案。
windowSoftInputMode
将无法按预期工作:getWindow().setFlags(
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
);
adjustResize
或AdjustPan
或任何windowSoftInputMode
属性正常工作,你需要从你的活动中删除它。将要推上去的内容包裹在Scrollview
中。
在片段的onResume()
方法中添加以下代码:
val imm = activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
// 监听键盘弹出和收起事件..
requireView().viewTreeObserver.addOnGlobalLayoutListener {
// 检查ScrollView是否滚动到底部
val isScrolledToBottom =
binding.scrollView.scrollY >= binding.scrollView.getChildAt(0).height - binding.scrollView.height
if (imm.isActive && !isScrolledToBottom) {
binding.scrollView.smoothScrollTo(
0,
binding.scrollView.bottom
)
}
}