繁体   English   中英

如何防止底部导航栏被推到显示的键盘上

[英]How to keep a bottom nav bar from being pushed up on keyboard shown

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

下面是我当前设置的图像示例以及我想要实现的目标。 我有一个包含我的页面内容的scrollview和一个与作为导航栏的父底部对齐的linearlayout。

我想要它的例子

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

我测试了windowSoftInputMode修复,但它隐藏了键盘后面的页面内容。 有没有办法让它继续推高滚动视图而不是底部导航? 我的另一个选择是设置visibility:gone在键盘上移动,然后在键盘上重新显示它,但这看起来过于复杂,并且从我阅读的内容来看并不总是可靠的。

如果有人有任何例子或建议,我会全力以赴。 谢谢。

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

机器人:isScrollContainer = “假”

或者在Manifest中的Activity的标签中添加它

机器人:windowSoftInputMode = “adjustPan”

只需在onCreate添加此行,当此选项设置窗口不会针对显示的输入方法进行调整。

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

我在SO上尝试了很多解决方案,只将android:windowSoftInputMode =“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)我最初没有使用ScrollView而b)我不想移动的项目是一个简单的TextView。

这是我找到的答案: 点击

我做了什么来解决它:

  • 使用adjustResize
  • 使用4个布局:周围的一个,1个用于标题,ScrollView和1个用于“底部导航”
  • 不要只依赖android:layout_alignParentBottom="true" ,这会将你的导航栏移动到屏幕的底部,这也意味着键盘可以因为“adjustResize”而将其向上移动
  • 另外使用android:layout_height="wrap_content"结合android:layout_below="@id/MyScrollView" (因此布局会占用它在ScrollView和屏幕底部之间可以获得的所有空间)和android:gravity="bottom"只是将所有内容都放在布局的底部。
  • 您也可以使用android:layout_height="match_parent"而不是android:layout_alignParentBottom="true"android:layout_height="wrap_content"但我没有像那样完全测试它。
  • 就像我说的那样,这将使“底部导航”布局消耗掉它可以在ScrollView下方获得的所有空间。 如果您不想这样,例如因为您的“底部导航”具有不同的颜色,您不希望显示太多,请尝试为“底部导航”创建一个周围的RelativeLayout,并在其中创建另一个可以推动“底部导航”导航“向下。 ;)

我很晚才回答,但我最近遇到了同样的情况。 我采用另一种方法来解决这个问题,而不是使用RelativeLayoutLinearLayout ,使用CoordinatorLayout并将行为应用于BottomNavigtaionView以显示/隐藏它,滚动到顶部或底部(与我们看到CollapsingToolBar或AppBarLayout的方式相同)。

用于BottomNavigationView的内置行为是app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"

您可以从我的另一个答案中详细阅读所有步骤。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM