我有一个包含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答案!
答案 0 :(得分:0)
我终于找到了解决方案。 之所以没有成功,是因为我没有将我的内容放在ScrollView元素中。 通过这样做,软键盘推动布局,从而产生可以测量的高度差异。