I'm using a simple layout for a login screen which contains a bar at the top and the necessary items for user to login or go to the sign up activity.
All the elements fit nicely on the screen until the virtual keyboard appears. The Android soft keyboard obscures part of the form, and I want to use a ScrollView so the user can scroll and be able to see all the elements.
But, even with ScrollView, I can't scroll to see the bottom of the page:
<?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>
I think I could do this: Android Soft Keyboard Obscures EditTexts in ScrollView but it doesn't seem like the best practice.
Does anyone know of a better way to make it scroll properly?
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;
}
}
Use this Custom Scroll View instead of the normal Scroll View. Change the value of scrollOffset to achieve the desired result (scrollOffset = 10 means extra 10dp will be scrolled down when soft keyboard opens) Make sure android:windowSoftInputMode="adjustResize"
is added in the activity
Check out the following link:
Android: ScrollView not scrolling with keyboard out
This solution worked for me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With