获取片段软键盘高度(Get Soft Keyboard Height in fragment)

2019-10-20 16:35发布

我有一个包含添加个人信息20+行的片段。 行的确切数目取决于的雇主从应用程序的用户有多少希望。

如果我需要显示的行数大于可用空间更大,具有软键盘的表现,我有其他行移动到下一个屏幕,等等。

这是我Gameplan的:检查我行有多高利润+(简单,硬编码)检查总屏幕高度检查软键盘高度

这会给我足够的信息来计算...你会得到的图片:)

目前似乎没有类似“getSoftKeyboardHeight”,所以我用我的片段这样的代码:

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        root = getActivity().getWindow().getDecorView().findViewById(R.id.fragment_container);

        root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            public void onGlobalLayout() {
                int heightDiff = root.getRootView().getHeight() - root.getHeight();
                // IF height diff is more then 150, consider keyboard as visible.
                Log.d("slideactivity", "total " + root.getRootView().getHeight());
                Log.d("slideactivity", "total " + root.getHeight());
                Log.d("slideactivity", "heightdiff = " + heightDiff);
            }
        });
    }

日志输出:

08-13 12:37:55.242     D/slideactivity﹕ total 600
08-13 12:37:55.242     D/slideactivity﹕ total 543
08-13 12:37:55.242     D/slideactivity﹕ heightdiff = 57

尽管实际上我一半的屏幕是由软键盘占据。 我开始怀疑..也许键盘只是弹出时,你得到打印的值,所以我没有得到正确的读..我以前在一个异步任务哈克的Thread.Sleep测量之前,但同样的信息想出了。

有谁知道如何解决这个问题? 也许有一些库,做所有的工作? 或者我在找错了地方的解决方案?

任何帮助是非常赞赏,因为我已经查了很多计算器的答案!

Answer 1:

我终于找到了解决办法。 为什么没有发挥出来的原因是因为我没有把我的滚动型元素的含量。 通过这样做,所述softkeyboard推动布局,因此产生的高度差,可以测量。



文章来源: Get Soft Keyboard Height in fragment