我有一个root scrollview元素,其中包含一个relativelayout,以及相对布局中的一堆表单元素。
出于某种原因,当软键盘打开时,它似乎无法一直向下滚动,这将我的一个按钮切成两半。
以下是层次结构查看器的屏幕截图,用于演示我的意思。
正如您所看到的,系统知道视图继续通过键盘,但滚动视图(正确填充屏幕的可见部分)将不会继续向下滚动。
我在活动的清单中有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>
答案 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的布局的父视图解决了这个问题。