当软键盘弹出时,如何创建一个不会随视图移动的粘性页脚?
下面是我当前设置的图像示例以及我想要实现的目标。我有一个包含我的页面内容的scrollview和一个与作为导航栏的父底部对齐的linearlayout。
问题是当键盘弹出时,它会推动我的整个视图,包括底部导航部分。我不想禁用视图的自动上推(通过设置android:windowSoftInputMode="adjustPan"
),而是排除单个元素被推上,我的底部导航栏。
我测试了windowSoftInputMode修复,但它隐藏了键盘后面的页面内容。有没有办法让它继续推高滚动视图而不是底部导航?我的另一个选择是在键盘上设置visibility:gone
,然后在键盘上重新显示它,但这看起来过于复杂,并且从我读到的内容并不总是可靠的。
如果有人有任何例子或建议,我会全力以赴。谢谢。
将其添加为滚动条的XML属性
机器人:isScrollContainer = “假”
或者在Manifest中的Activity的标签中添加它
机器人:windowSoftInputMode = “adjustPan”
我在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。
这是我找到的答案:click
我做了什么来解决它:
adjustResize
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"
,但我没有像那样完全测试它。只需在onCreate
中添加此行,当此选项设置窗口时不调整显示的输入法。 :
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
我很晚才回答,但我最近遇到了同样的情况。我采用另一种方法来解决这个问题,而不是使用RelativeLayout
或LinearLayout
,使用CoordinatorLayout
并将行为应用于BottomNavigtaionView
以显示/隐藏它,滚动到顶部或底部(我们看到CollapsingToolBar或AppBarLayout的方式相同)。
用于BottomNavigationView的内置行为是app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
您可以从我的another answer here详细阅读所有步骤。
附:我发布它作为答案而不是评论,因为有时我们只是寻找答案而忽略评论,我相信它可能是解决这个问题的好方法,所以你不应该忽略它并给它一次读。谢谢。