Android ScrollView拒绝滚动到底部

我有一个在其中有一个相对布局的根scrollview元素,和相对布局内的一堆表单元素。

出于某种原因,当软键盘弹起时,似乎无法一直滚动到底部,这将我的一个button切成两半。

下面是层次结构查看器的截图,以演示我的意思。

在这里输入图像说明

正如你所看到的,系统知道视图继续通过键盘,但滚动视图(正确填充屏幕的可见部分)不会继续向下滚动,因为它应该。

我有活动清单中的android:windowSoftInputMode="adjustResize" ,我可以/不会将它切换到平移。

任何帮助表示赞赏。

编辑:我看到这在一个以上的观点。 这里是另一个视图的xml的相同的问题:

 <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/background" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="32dp" > <EditText android:id="@+id/reset_oldpass" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:ems="10" android:singleLine="true" android:hint="@string/current_password" android:layout_marginTop="16dp" /> <EditText android:id="@+id/reset_pass1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_below="@+id/reset_oldpass" android:ems="10" android:hint="@string/reset_new_pass" android:inputType="textPassword" android:layout_marginTop="16dp" /> <EditText android:id="@+id/reset_pass2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_below="@+id/reset_pass1" android:ems="10" android:hint="@string/reset_confirm_pass" android:inputType="textPassword" android:layout_marginTop="16dp" /> <TextView android:id="@+id/reset_forgot_password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_below="@+id/reset_pass2" android:layout_marginTop="16dp" android:textColor="@color/Link" android:textStyle="bold" android:text="@string/Login_forgot_password" /> <Button android:id="@+id/reset_reset_password_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/reset_forgot_password" android:layout_centerHorizontal="true" android:layout_marginTop="16dp" android:layout_marginBottom="32dp" android:text="@string/reset_change_pass" /> </RelativeLayout> </ScrollView> 

这真的很奇怪,但它似乎是由RelativeLayout内的android:layout_margin="32dp"造成的。 一旦我拿出来,滚动正常工作。

当然,正因为如此,我不得不为表单元素添加更多边距,但至less现在已经修复了。

我有同样的问题,我通过使用ScrollView中的填充而不是RelativeLayout中的边距来修复它。

因此,从RelativeLayout(ScrollView的子项)中删除android:layout_margin="32dp" ,并将android:padding="32dp"到ScrollView中。

您也可以插入一个错误的视图来模仿底部边距,如下所示:

 <View android:layout_width="match_parent" android:layout_height="20dp" android:layout_below="@id/recompensaLabel" android:layout_marginTop="0dp" android:id="@+id/simulate_bottom_margin_view" /> 

效果是一样的,你只需要把它插在你的相对布局的最后一个元素的下面。

我刚刚遇到了一个应用程序的问题,并发现这是由于ScrollView layout_height被设置为包装内容。 问题是,如果你有足够的内容需要一个滚动视图,你不想包装的内容,因为滚动视图的底部离开了一些任意数量的屏幕。 我没有足够的数据受到这个影响,因为我不需要一个ScrollView,直到popup键盘。 从外观上看,OP的情况相同。

现在,一旦popup键盘,ScrollView的底部被抬起与键盘的高度相同的量,并以低于可见屏幕的底部的相同的任意数量结束到键盘的顶部之下。

最终,我的解决方法是将ScrollView的顶部绑定到我的工具栏,然后右键单击树中的ScrollVIew并select“垂直居中”(不在父项中)。 现在就像一个魅力。 layout_height应该自动转到0dp。