Java 键盘将内容隐藏在片段中,我需要调整框架布局的大小,以便底部正好位于键盘上方,现在可以滚动

Java 键盘将内容隐藏在片段中,我需要调整框架布局的大小,以便底部正好位于键盘上方,现在可以滚动,java,android,keyboard,fragment,scrollview,Java,Android,Keyboard,Fragment,Scrollview,我的应用程序中有一个片段,它有一个用于注册和登录页面的滚动视图。目前,scroll视图中没有足够的内容使其真正滚动,但是当键盘出现时,它确实覆盖了视图中的大部分内容。这会导致很多问题,尤其是在屏幕较小的设备上,它会阻塞很多,并且视图不可滚动,因此我必须关闭键盘才能获得其余的输入 我需要将fragments框架布局的底部向上推到键盘顶部的正上方,这样键盘就不会实际隐藏任何内容,并且仍然允许滚动视图实际滚动到其余内容 我已经看到了一个类似于此的问题的常见修复方法,它将AndroidManifest.

我的应用程序中有一个片段,它有一个用于注册和登录页面的滚动视图。目前,scroll视图中没有足够的内容使其真正滚动,但是当键盘出现时,它确实覆盖了视图中的大部分内容。这会导致很多问题,尤其是在屏幕较小的设备上,它会阻塞很多,并且视图不可滚动,因此我必须关闭键盘才能获得其余的输入

我需要将fragments框架布局的底部向上推到键盘顶部的正上方,这样键盘就不会实际隐藏任何内容,并且仍然允许滚动视图实际滚动到其余内容

我已经看到了一个类似于此的问题的常见修复方法,它将AndroidManifest.xml更改为以下内容:

android:windowSoftInputMode="adjustResize"
但这将推高整个页面,其中包括我在登录和注册片段布局下方和外部的页脚视图。它使我的scrollview变小并允许它滚动,但我仍然需要将页脚隐藏在键盘下

我认为解决这个问题的一个办法是覆盖OnConfiguration Changed();在MyActivity中,它将检测键盘是否已出现,如果已出现,请将框架布局的底部推到键盘的正上方,从而使滚动视图变小,并允许我们实际滚动。不过,我不太确定如何做到这一点

下面是键盘向上,阻止内容时的样子。如果滚动视图是可滚动的,允许我查看其余的内容,那么这就没问题了,但是它不会滚动,访问其下内容的唯一方法是先关闭键盘

编辑 我能够使用下面的答案,编辑Android的清单

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

我让它调整我的视图,使页脚向下推,然后调整包含片段的布局,使其向下延伸,使其仍然可以滚动。

好的,下面是我解决问题的方法


基本理念是您必须:

  • 检测是否显示
    软键盘
  • 反应。根据检测到的信息(软键盘显示),相应调整布局大小

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

  • 要为活动的根视图提供一个已知ID,如“@+ID/activityRoot”,请将一个
    GlobalLayoutListener
    挂接到
    ViewTreeObserver
    ,然后从那里计算活动的视图根和窗口大小之间的大小差异:

  • 自定义顶级布局类,使其覆盖
    onMeasure()


  • 我想把上面的答案归功于这篇文章:,这是我之前在这个特殊问题上发现的。

    你的意思是只向上推屏幕的一部分?@adcom我需要将包含片段的框架布局的底部推到键盘顶部之后。调整scrollview的大小,使键盘不覆盖其中任何一个,scrollview将可再次滚动。我想这会给你一些想法。@penkzhou,对不起,这没有帮助,在调整片段所在视图的大小时,我需要页脚留在键盘下方,以保持视图底部正好在键盘上方,并允许我在中滚动浏览内容it@JakeWeso我收到了你的电子邮件,请给我一些时间来回顾我为解决这个问题所做的一切:)非常感谢Roylee!我使用了第一种方法,效果非常好,我让它更改视图的边距以隐藏页脚,并调整片段保持架的大小,使其再次可滚动!