java - 键盘隐藏 fragment 中的内容,我需要调整框架布局的大小,以便底部位于键盘上方,现在可以滚动

标签 java android keyboard fragment scrollview

我的应用程序中有一个 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 向下延伸的布局大小,使其仍然可以滚动。

最佳答案

好的,这就是我解决这个问题的方法。

<小时/>

基本思想是您必须:

  1. 检测是否显示软键盘
  2. react 。根据检测到的信息(is-soft-keyboard-showing),相应地调整布局大小。
<小时/>

有两种方法可以实现这一目标:

  1. 要为 Activity 的 Root View 指定一个已知 ID,例如“@+id/activityRoot”,请将 GlobalLayoutListener 挂接到 ViewTreeObserver 中,然后从那里计算Activity 的 View 根和窗口大小之间的大小差异:

  2. 将您的顶级布局类自定义为重写 onMeasure()

我想将上述答案归功于此帖子:how-to-check-visibility-of-software-keyboard-in-android ,我之前在这个特定问题上发现过。

关于java - 键盘隐藏 fragment 中的内容,我需要调整框架布局的大小,以便底部位于键盘上方,现在可以滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24794416/

相关文章:

java - 如何通过配置设置 Tomcat 响应缓冲区大小?

android - 在 Moto G 上运行 CTS

java - 修改键状态

Windows如何将右ctrl键用作左ctrl?

java - Jena 删除 OntClass

java - 为什么两个 LocalDate 变量之间的比较不起作用?

java - JDialog 因失去焦点而卡住?

java - 如何从 json 解码 ascii 代码

java - IOException 为获取消息返回 null

iphone - 开始编辑和键盘出现时在文本字段上滚动