我的应用程序有4个Fragment
s(显示为标签页),并且所有这些应用程序共享相同的分割Action Bar
。顶部栏有标签'按钮和底栏有动作'纽扣。其中一个Fragment
在顶部有一个EditText
,在其下面有一个ListView
。
现在,Fragment
中键盘的问题是:
如果我使用adjustPan
将键盘盖到底栏,则ListView
不会调整大小,因此键盘会覆盖其中的一些元素,我可以“滚动看他们;
如果我使用adjustResize
,ListView
确实会调整大小,但当然,底部栏会被推高。我不想要那个。
我喜欢的是底部栏被键盘覆盖并且ListView
被调整大小以便我可以通过滚动查看其所有元素。
与此同时,我将使用adjustPan
并在用户触摸ListView
时使键盘消失,但我想找到一种方法来制作我上面解释的内容。
在键盘出现时(使用ListView
时)尝试以编程方式调整adjustPan
是不是一个坏主意?或者有没有办法在使用setVisibility(View.GONE)
时隐藏(使用adjustResize
或其他)底栏?最后,是否有一种简单的方法可以理解键盘何时出现并达到其高度?
感谢您的帮助。
P.S。我已经找到了所有类似的问题,但没有一个问题有解决方案。
答案 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);
}
}
});