ScrollView no se desplaza si el teclado virtual está visible
Estoy usando un diseño simple para una pantalla de inicio de sesión que contiene una barra en la parte superior y los elementos necesarios para que el usuario inicie sesión o vaya a la actividad de registro.
Todos los elementos encajan perfectamente en la pantalla hasta que aparezca el teclado virtual. El teclado virtual de Android oculta parte del formulario y quiero usar un ScrollView para que el usuario pueda desplazarse y poder ver todos los elementos.
- Habilitar scroll intertial en NestedScrollView (Android Studio)
- Android NestedScrollView alinear el contenido en la parte superior
- ¿Cómo desplazarse a la parte superior del diseño de ScrollView largo?
- Android: Problema con ScrollView
- Detener ScrollView de establecer el enfoque en EditText
Pero, incluso con ScrollView, no puedo desplazarte para ver la parte inferior de la página:
<?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>
Creo que podría hacer esto: Teclado Soft Android Obscure EditTexts en ScrollView, pero no parece la mejor práctica.
¿Alguien sabe de una mejor manera de hacer que se desplace correctamente?
- Cómo saber si Ver dentro de Desplazamiento es visible completamente o no
- Android RelativeLayout alinear preocupación
- NestedScrollView (NSV) en CoordinatorLayout (CL): NSV no en la parte superior cuando se carga
- Detección de gestos y edición ScrollView
- Mover EditText en NestedScrollView cuando aparece el teclado virtual
- Vista ScrollView con niños, cómo interceptar desplazamiento condicional
- Gridlayout + ScrollView
- ¿Cómo puedo obtener una función de paginación en vista de desplazamiento horizontal sin ViewPager?
Echa un vistazo al siguiente enlace:
Android: ScrollView no se desplaza con el teclado fuera
Esta solución funcionó para mí.
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; } }
Utilice esta vista de desplazamiento personalizada en lugar de la vista de desplazamiento normal. Cambie el valor de scrollOffset para obtener el resultado deseado (scrollOffset = 10 significa que se extraerá 10dp extra cuando se abra el teclado android:windowSoftInputMode="adjustResize"
) Asegúrese de que android:windowSoftInputMode="adjustResize"
se agrega en la actividad
- ¿Diferencia entre addOnLayoutChangeListener y onLayout (cambiado)?
- ¿Qué es el método getApplicationContext ()?