获取片段中的软键盘高度

时间:2014-08-13 12:56:06

标签: android android-fragments virtual-keyboard

我有一个包含20多行的片段,用于添加个人信息。 确切的行数取决于雇主对应用程序用户的需求。

如果我需要显示的行数大于可用空间,显示软键盘,我必须将其他行移动到下一个屏幕,依此类推。

这是我的游戏计划: 检查我的行有多高+边距(简单,硬编码) 检查总屏幕高度 检查软键盘高度

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

似乎没有" 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

实际上一半的屏幕被软键盘占用。 我开始怀疑......也许键盘只是在值打印时弹出, 所以我没有得到正确的阅读.. 我在测量之前在异步任务中使用了一个hacky Thread.Sleep,但是出现了相同的信息。

有谁知道如何解决这个问题? 也许有一些图书馆可以完成所有工作? 或者我在错误的地方寻找解决方案?

非常感谢任何帮助,因为我已经检查了很多stackoverflow答案!

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。 之所以没有成功,是因为我没有将我的内容放在ScrollView元素中。 通过这样做,软键盘推动布局,从而产生可以测量的高度差异。