【发布时间】: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