Android 如图所示,如何防止底部导航条在键盘上向上推

Android 如图所示,如何防止底部导航条在键盘上向上推,android,android-softkeyboard,Android,Android Softkeyboard,当软键键盘弹出时,如何创建不会随视图上移的粘性页脚 下面是我当前设置的图像示例以及我想要实现的目标。 我有一个包含我的页面内容的滚动视图和一个与用作导航条的父底部对齐的线性布局 问题是当键盘弹出时,它会向上推我的整个视图,包括底部导航部分我不想禁用视图的自动上推功能(通过设置android:windowSoftInputMode=“adjustPan”),而是排除向上推的单个元素,即我的底部导航栏 我已经测试了WindowsOfInputMode修复程序,但它将我的页面内容隐藏在键盘后面。有没

当软键键盘弹出时,如何创建不会随视图上移的粘性页脚

下面是我当前设置的图像示例以及我想要实现的目标。 我有一个包含我的页面内容的滚动视图和一个与用作导航条的父底部对齐的线性布局


问题是当键盘弹出时,它会向上推我的整个视图,包括底部导航部分我不想禁用视图的自动上推功能(通过设置
android:windowSoftInputMode=“adjustPan”
),而是排除向上推的单个元素,即我的底部导航栏

我已经测试了WindowsOfInputMode修复程序,但它将我的页面内容隐藏在键盘后面。有没有办法让它继续向上推滚动视图而不是底部导航?我的另一个选择是设置
可见性:在键盘上向上移动
,然后在键盘上向下移动,但从我读到的内容来看,这似乎过于复杂,并不总是可靠的


如果有人有任何例子或建议,我洗耳恭听。谢谢。

或者将其添加为滚动条的XML属性

android:isScrollContainer=“false”

或者将此添加到清单中活动的标记中

android:WindowsOfInputMode=“adjustPan”


我尝试了许多在SO上找到的解决方案,只在清单中添加了android:WindowsofInputMode=“adjustNothing”,因为该活动对我有效:

<activity
    android:name=".MainActivity"
    android:windowSoftInputMode="adjustNothing">

关联布局:

  <RelativeLayout
     ...
        <android.support.v4.widget.NestedScrollView
           ...
        </android.support.v4.widget.NestedScrollView>
        <android.support.design.widget.BottomNavigationView
             ...
            design:menu="@menu/navigation"/>
    </RelativeLayout>

我遇到了一个非常类似的问题,不同之处在于a)我起初没有使用滚动视图,b)我不想移动的项目是一个简单的文本视图

以下是我找到的答案:

我做了什么来修复它:

  • 使用
    adjustResize
  • 使用4种布局:一种是环绕布局,一种是标题布局,一种是滚动视图布局,另一种是“底部导航”布局
  • 不要只依赖android:layout\u alignParentBottom=“true”
,这会将导航栏移到屏幕底部,但也意味着键盘可以因为“调整大小”而将其向上移动
  • 另外,将
    android:layout\u height=“wrap\u content”
    android:layout\u below=“@id/MyScrollView”
    结合使用(这样布局将耗尽滚动视图和屏幕底部之间的所有空间)和
    android:gravity=“bottom”
    将所有内容都放在布局的底部
  • 您也可以使用
    android:layout\u height=“match\u parent”
    而不是
    android:layout\u alignParentBottom=“true”
    android:layout\u height=“wrap\u content”
    ,但我并没有像这样对它进行全面测试
  • 正如我所说的,这将使“底部导航”布局耗尽它在ScrollView下可以获得的所有空间。如果您不想这样做,例如,因为您的“底部导航”具有不同的颜色,您不想显示太多,请尝试为“底部导航”创建一个周围的相对位置,并在内部创建另一个可以向下推动“底部导航”的空布局
    当此选项设置窗口不针对显示的输入法进行调整时,只需在您的
    onCreate
    中添加这一行即可:

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
    

    我很晚才回答,但我最近遇到了同样的情况。我采用了另一种方法来解决这个问题,而不是使用
    RelativeLayout
    LinearLayout
    ,使用
    CoordinatorLayout
    并将行为应用到
    BottomNavigtaionView
    上下滚动来显示/隐藏它(与我们看到折叠工具栏或AppBarLayout的方式相同)

    用于BottomNavigationView的内置行为是
    app:layout\u behavior=“@string/hide\u bottom\u view\u on\u scroll\u behavior”

    您可以从我的手册中详细阅读所有步骤


    另外,我把它作为一个答案而不是评论发布,因为有时候我们只是寻找答案而忽略了评论,我相信这可能是解决这个问题的一个好方法,所以你不应该忽略它,只看一次。谢谢。

    你可能应该在回答中使用注释而不是提问。
    android:windowSoftInputMode=“adjustPan”
    在清单上对我的案例有效,我遇到了与OP相同的问题,而
    android:windowSoftInputMode=“adjustNothing”
    使键盘覆盖了页脚(位于屏幕底部),ScrollView不会被推上并失去其滚动能力,这意味着它的最后部分在键盘后面,无法访问。Good point@Neph-我还发现解决方案高度依赖于整个视图层次结构,在一个实例中工作的内容在另一个实例中会产生不良后果。你太棒了!帮助了我已经很晚了,但我已经发布了一个答案,因此任何人遇到这个问题,请仔细阅读我的答案一次,这可能会节省您的时间和精力。在活动的onCreate方法中执行此操作。它将应用于该活动中的所有片段。