解决软键盘弹出时挤压或覆盖原始布局的问题

电脑杂谈  发布时间:2020-08-21 04:04:42  来源:网络整理

按键盘弹出别的窗口_键盘弹出控件不被挤压_窗口化游戏后按键盘就弹出搜索

让我们先看看这两种情况,这种体验对用户来说确实很糟糕

第一种类型: 试图被掩盖,用户看不到输入框

按键盘弹出别的窗口_窗口化游戏后按键盘就弹出搜索_键盘弹出控件不被挤压

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

窗口化游戏后按键盘就弹出搜索_键盘弹出控件不被挤压_按键盘弹出别的窗口

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

窗口化游戏后按键盘就弹出搜索_键盘弹出控件不被挤压_按键盘弹出别的窗口

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

按键盘弹出别的窗口_窗口化游戏后按键盘就弹出搜索_键盘弹出控件不被挤压

弹出键盘时,没有相应的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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...