Android ScrollView拒绝滚动到底部

时间:2012-07-26 01:02:20

标签: android android-layout scroll scrollview

我有一个root scrollview元素,其中包含一个relativelayout,以及相对布局中的一堆表单元素。

出于某种原因,当软键盘打开时,它似乎无法一直向下滚动,这将我的一个按钮切成两半。

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

enter image description here

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

我在活动的清单中有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>

5 个答案:

答案 0 :(得分:40)

这真的很奇怪,但似乎是由RelativeLayout中的android:layout_margin="32dp"引起的。一旦我拿出它,滚动就能正常工作。

当然,因为这个我不得不为我的表单元素添加更多的边距,但至少现在已经修复了。

答案 1 :(得分:13)

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

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

答案 2 :(得分:0)

你也可以插入一个假视图来模仿下边距:

<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"

            />

效果相同,您只需将其插入相对布局中的最后一个元素下方。

答案 3 :(得分:0)

我刚刚在应用程序中遇到此问题,并发现它是由于ScrollView layout_height被设置为包装内容。问题是,如果你有足够的内容需要ScrollView,你不想包装内容,因为ScrollView的底部离开了屏幕任意数量。我没有足够的数据受此影响,因为在键盘弹出之前我不需要ScrollView。从它的外观来看,OP处于相同的情况。

现在,一旦键盘弹出,ScrollView的底部就会升高与键盘高度相同的数量,并以键盘顶部下方的任意数量与可见底部相同的任意数量结束。屏幕。

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

答案 4 :(得分:0)

在棒棒糖及以上制作状态栏是透明的,这对我来说是个问题。将

android:fitsSystemWindows="true"
设置为包含scrollView的布局的父视图解决了这个问题。