我的应用程序中有一个 fragment ,其中有注册和登录页面的 ScrollView 。目前, ScrollView 中没有足够的内容来实际使其滚动,但是当键盘出现时,它确实会覆盖 View 中的大部分内容。这会导致很多问题,特别是在屏幕较小的设备上,它会阻塞很多,并且 View 不可滚动,因此我必须关闭键盘才能访问其余的输入。
我需要将 fragment 框架布局的底部推到键盘顶部上方,这样键盘实际上不会隐藏任何内容,并且仍然允许 ScrollView 实际滚动到屏幕的其余部分内容。
我已经看到了与此类似的问题的常见修复方法,它将 AndroidManifest.xml 更改为以下内容:
android:windowSoftInputMode="adjustResize"
但这会推高整个页面,其中包括我在登录和注册 fragment 布局下方和外部的页脚 View 。它使我的 ScrollView 变小并允许其滚动,但我需要页脚仍然隐藏在键盘下方。
我认为解决这个问题的方法是重写 onConfigurationChanged();在 MyActivity 中,它将检测键盘是否出现,如果出现,则将框架布局的底部推到键盘上方,从而使 ScrollView 更小,并允许我们实际滚动。我不太确定如何做到这一点。
这是键盘向上时的样子,挡住了内容。如果 ScrollView 是可滚动的,允许我看到其余内容,那就没问题,但是它不会滚动,访问其下方内容的唯一方法是先关闭键盘。
编辑 我能够使用下面的答案,编辑 Android list
android:windowSoftInputMode="adjustResize"
第一种方法使用下面的代码
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...
... do something here
}
}
});
我让它调整我的 View ,以便页脚将被推到下方,然后调整保持 fragment 向下延伸的布局大小,使其仍然可以滚动。
最佳答案
好的,这就是我解决这个问题的方法。
<小时/>基本思想是您必须:
- 检测是否显示
软键盘
, - react 。根据检测到的信息(is-soft-keyboard-showing),相应地调整布局大小。
有两种方法可以实现这一目标:
要为 Activity 的 Root View 指定一个已知 ID,例如“@+id/activityRoot”,请将
GlobalLayoutListener
挂接到ViewTreeObserver
中,然后从那里计算Activity 的 View 根和窗口大小之间的大小差异:将您的顶级布局类自定义为重写
onMeasure()
我想将上述答案归功于此帖子:how-to-check-visibility-of-software-keyboard-in-android ,我之前在这个特定问题上发现过。
关于java - 键盘隐藏 fragment 中的内容,我需要调整框架布局的大小,以便底部位于键盘上方,现在可以滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24794416/