
让我们先看看这两种情况,这种体验对用户来说确实很糟糕
第一种类型: 试图被掩盖,用户看不到输入框

第二种情况: 试图被向上挤压,导致博客上方的标题栏被顶

从用户的角度来看,这两个都是不好的,因此请提供解决方案

想法: 获取键盘弹出时的高度,然后让该部件尝试移动它. 为什么说该部分尝试?因为就像这里的博客作者的标题栏一样,博客作者不希望他更改,所以下面是实现的效果图

弹出键盘时,没有相应的API供我们调用,但可以通过其他方式实现. 我们设置软键盘的模式以覆盖我们的布局. 然后键盘弹出会不可避免地导致我们的活动Covered的根本尝试,这将导致视图重新调整,因此这时我们只需要在重新排列视图时侦听回调,然后计算基于整个根布局的高度和可见高度(即键盘的高度)确定的覆盖高度. 然后,让布局的一部分向上滚动一定距离,该距离就是键盘的高度!
然后转到代码
/**
* @param root 最外层布局
* @param needToScrollView 要滚动的布局,就是说在键盘弹出的时候,你需要试图滚动上去的View,在键盘隐藏的时候,他又会滚动到原来的位置的布局
*/
private void controlKeyboardLayout(final View root, final View needToScrollView) {
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
private Rect r = new Rect();
@Override
public void onGlobalLayout() {
//获取当前界面可视部分
ConversationAct.this.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
//获取屏幕的高度
int screenHeight = ConversationAct.this.getWindow().getDecorView().getRootView().getHeight();
//此处就是用来获取键盘的高度的, 在键盘没有弹出的时候 此高度为0 键盘弹出的时候为一个正数
int heightDifference = screenHeight - r.bottom;
needToScrollView.scrollTo(0, heightDifference);
}
});
}
此方法不是最佳方法. 如果l列表中只有几项,则在弹出键盘后,信息将向上滚动,因此博客作者随后编写了另一种方法,即计算键盘弹出时间,列表高度或需要调整的布局. 然后也可以满足要求
如有任何疑问,请留言.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-303455-1.html
稿费低
海南岛边12海里