2

我有一个有 4 Fragments 的应用程序(显示为​​选项卡),它们都共享相同的 split Action Bar。顶栏有选项卡按钮,底栏有操作按钮。上面有一个Fragment,下面有一个。 现在,键盘的问题是: EditTextListView
Fragment

如果我adjustPan用来让键盘覆盖底部栏,则ListView不会调整大小,因此它的某些元素会被键盘覆盖,我无法滚动查看它们;

如果我使用adjustResizeListView确实会调整大小,但底部栏会被推高,当然。我不想要那个。

我想要的是底部栏被键盘覆盖ListView并调整大小,以便我可以通过滚动查看其所有元素。
同时,当用户触摸 时,我将使用adjustPan并让键盘消失ListView,但我想找到一种方法来实现我上面解释的内容。

当键盘出现时(使用时)尝试以ListView编程方式调整大小是一个坏主意adjustPan吗?或者有没有办法在使用时隐藏(使用setVisibility(View.GONE)或其他东西)底栏adjustResize?最后,是否有一种简单的方法可以了解键盘何时出现并获取其高度?

谢谢您的帮助。

PS我已经找到了所有几个类似的问题,但没有一个有解决方案。

4

1 回答 1

0

我能想到的一件事是将softInputMethodMode设置为adjustResize,然后在键盘关闭和打开时显示或隐藏底栏。虽然没有要监听的键盘打开/关闭事件,但您可以通过观察窗口高度的变化来检测它。您可以通过向主内容视图的视图树观察器添加全局布局侦听器来实现此目的。查看这篇文章,了解使用视图树观察器的解释和代码。

编辑

这是我从上面的链接中复制的一个片段,其中包含相关更改(我没有尝试过,但它突出了这个想法):

View bottomBar = findViewById(R.id.your_bottom_bar);
final View activityRootView = findViewById(R.id.activityRoot);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
        if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
            bottomBar.setVisibility(View.GONE);
        }else{
            bottomBar.setVisibility(View.VISIBLE);
        }
     }
});
于 2015-05-01T19:49:32.150 回答