28

我有一个带有相对布局的根滚动视图元素,以及相对布局内的一堆表单元素。

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

这是层次结构查看器的屏幕截图,以说明我的意思。

在此处输入图像描述

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

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

任何帮助表示赞赏。

编辑:我在不止 1 个视图中看到这个。这是另一个具有相同问题的视图的 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>
4

4 回答 4

41

这确实很奇怪,但似乎是由android:layout_margin="32dp"RelativeLayout内部引起的。一旦我把它拿出来,卷轴就可以正常工作。

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

于 2012-07-26T01:55:00.573 回答
13

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

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

于 2013-08-07T12:32:08.707 回答
2

在棒棒糖及更高版本中使状态栏透明给我带来了问题。环境

安卓:fitsSystemWindows="真"
到包含 scrollView 的布局的父视图解决了这个问题。

于 2018-02-23T08:07:57.937 回答
0

我刚刚在一个应用程序中遇到了这个问题,发现这是由于 ScrollView layout_height 被设置为包装内容。问题是,如果您有足够的内容需要 ScrollView,则您不想包装内容,因为 ScrollView 的底部在屏幕之外任意量。我没有足够的数据受此影响,因为在键盘弹出之前我不需要 ScrollView。从表面上看,OP处于同样的境地。

现在,一旦键盘弹出,ScrollView 的底部将被提升到与键盘高度相同的高度,并最终在键盘顶部下方与可见屏幕底部下方相同的任意数量。

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

于 2017-10-02T06:56:01.697 回答