如果软键盘可见,ScrollView不会滚动

我在登录屏幕上使用了一个简单的布局,其中包含顶部的栏以及用户登录或注册活动所需的必要项目。

虚拟键盘出现之前,所有元素都能很好地融合在屏幕上。 Android软键盘隐藏了表单的一部分,我想使用ScrollView,以便用户可以滚动并查看所有元素。

但是,即使使用ScrollView,我也无法滚动查看页面的底部:

<?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="fill_parent"
android:fillViewport="true" >
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFCB05"
android:orientation="vertical"
android:isScrollContainer="true"
android:gravity="top" >

<include
    android:id="@+id/include1"
    android:layout_width="fill_parent"
    android:layout_height="50dip"
    layout="@layout/actionbar_layout" />

<LinearLayout 
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:orientation="vertical"
android:gravity="center_vertical"
android:layout_below="@+id/include1"
 >



<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/usuario"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#000000" />

    <EditText
        android:id="@+id/txtUsuario"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="5dp"
        android:ems="10"
        android:hint="@string/usuario" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_marginTop="15dip" >

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="@string/senha"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#000000" />

    <EditText
        android:id="@+id/txtSenha"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView2"
        android:layout_centerVertical="true"
        android:layout_marginTop="5dip"
        android:ems="10"
        android:hint="@string/senha"
        android:inputType="textPassword" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="right" >

    <Button
        android:id="@+id/logarBtn"
        android:layout_width="93dp"
        android:layout_height="wrap_content"
        android:layout_marginRight="30dip"
        android:layout_marginTop="15dip"
        android:layout_marginBottom="15dip"
        android:text="@string/logar" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center_horizontal" >

    <TextView
        android:id="@+id/registerBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/logarBtn"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dip"
        android:layout_marginBottom="60dip"
        android:linksClickable="true"
        android:text="@string/cadastrar"
        android:textColor="#0000CC"
        android:textSize="18dp" />
</LinearLayout>

</LinearLayout>

</RelativeLayout>
</ScrollView>

我想我可以做到这一点:Android软键盘在ScrollView中隐藏EditTexts,但它似乎不是最佳做法。

有谁知道更好的方法来使其正确滚动吗?


看看下面的链接:

Android:ScrollView不能用键盘滚动

这个解决方案为我工作。


public class CustomScrollView extends ScrollView {

  private int scrollOffset = 0;

  public CustomScrollView (final Context context, final AttributeSet attrs) {
    super(context, attrs);
  }

  public void setScrollOffset (final int scrollOffset) {
    this.scrollOffset = scrollOffset;
  }

  @Override
  protected int computeScrollDeltaToGetChildRectOnScreen (final Rect rect) {
    // adjust by scroll offset
    int scrollDelta = super.computeScrollDeltaToGetChildRectOnScreen(rect);
    int newScrollDelta = (int) Math.signum(scrollDelta) * (scrollDelta + this.scrollOffset);
    return newScrollDelta;
  }
}

使用此自定义滚动视图而不是普通的滚动视图。 更改scrollOffset的值以获得所需的结果(scrollOffset = 10意味着当软键盘打开时会向下滚动额外的10dp)确保在活动中添加了android:windowSoftInputMode="adjustResize" 链接地址: http://www.djcxy.com/p/10925.html

上一篇: ScrollView doesn't scrolls if soft keyboard is visible

下一篇: Do we need Hibernate mapping In this scenario?