adjustResize:当键盘可见时,尝试不显示Split Action Bar的底栏

时间:2015-05-01 19:18:42

标签: android android-softkeyboard splitactionbar

我的应用程序有4个Fragment s(显示为标签页),并且所有这些应用程序共享相同的分割Action Bar。顶部栏有标签'按钮和底栏有动作'纽扣。其中一个Fragment在顶部有一个EditText,在其下面有一个ListView。 现在,Fragment中键盘的问题是:

如果我使用adjustPan将键盘盖到底栏,则ListView不会调整大小,因此键盘会覆盖其中的一些元素,我可以“滚动看他们;

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

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

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

感谢您的帮助。

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

1 个答案:

答案 0 :(得分:0)

我能想到的一件事是将softInputMethodMode设置为adjustResize,然后在键盘关闭和打开时显示或隐藏底栏。虽然没有任何键盘打开/关闭事件可供收听,但您可以通过观察窗口高度的变化来检测它。您可以通过adding a global layout listener向主内容视图的视图树观察器实现此目的。查看this post以获取使用视图树观察器的说明和代码。

修改

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

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);
        }
     }
});