为了解决这个问题,我已经做了很多关于 SO 的阅读,但我还没有找到一个很好的解决方案,所以就到这里了。
我要做的是:我正在尝试使用 EditText、TextView 和 ListView 创建一个垂直的 LinearLayout。我希望布局的排列方式使得当 EditText 聚焦时,TextView 与键盘顶部齐平,键盘将 ListView 隐藏在底部。然后,当键盘被隐藏时,ListView 再次显示。
到目前为止我所拥有的(目前正在工作,但是一个可怕的丑陋黑客)。是我实现了这里显示的方法:如何检查 Android 中软件键盘的可见性?检测键盘何时显示以及可视区域的剩余大小。然后,我计算键盘上方所有固定大小元素的大小(ActionBar、TextView 和随机 ImageView)。然后我从可用的总面积中减去它,并将我的 EditText 设置为剩余的大小。
这样,由于 EditText 直接放置在 TextView 的上方,它会将 TextView 推到键盘上方的正确高度,并为所有内容留出足够的空间。
现在,这显然让我非常不舒服,因为我一定会遇到一个小屏幕的用户,它以某种方式打破了这个丑陋的黑客;但是,我还没有找到更好的方法来解决这个问题。有没有人对如何做到这一点有任何建议?
我尝试的另一个解决方案是在显示软键盘时将 Activity 设置为 adjustResize,然后隐藏我的 ListView。但是,由于显示/未显示键盘的时间延迟,这最终看起来非常糟糕。
编辑:我添加了我正在寻找的像素精确的表示。