【问题标题】:Get Soft Keyboard Height in fragment获取片段中的软键盘高度
【发布时间】:2014-10-06 20:27:51
【问题描述】:

我有一个包含 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 答案!

【问题讨论】:

    标签: android android-fragments virtual-keyboard


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-19
      • 2012-12-01
      • 2014-05-26
      • 2019-03-03
      • 2013-08-28
      • 2015-05-06
      • 2018-08-22
      • 1970-01-01
      相关资源
      最近更新 更多