如果软键盘可见,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