Centro de contenido en vista de desplazamiento

Quiero centrar mi LinearLayout dentro de ScrollView. Cuando la altura de LinearLayout es pequeña, está centrada correctamente (ver imagen # 1), pero cuando la altura de LinearLayout es más grande que la altura de la pantalla entonces se comporta extraño. No puedo ver la parte superior de LinearLayout (ver imagen # 2) y en la parte inferior de ScrollView hay gran relleno. No sé qué está pasando aquí. Cuando hay un montón de contenido en LinearLayout toda la pantalla debe verse en la imagen # 3.

Imagen # 1
Imagen # 2
Imagen # 3

Aquí está mi archivo de diseño:

<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#cccfff" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_margin="28dp" android:background="#ffffff" android:orientation="vertical" android:paddingBottom="40dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="40dp" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/tip_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="12dp" android:text="Title" android:textColor="@color/orange_text" android:textSize="@dimen/font_size_medium" /> <TextView android:id="@+id/tip_description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Description description..." android:textSize="@dimen/font_size_small" /> </LinearLayout> </ScrollView> 

Debe utilizar un LinearLayout horizontal externo. Está funcionando para mí en la misma situación.

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal" > <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" > <TextView android:text="@string/your_text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </ScrollView> </LinearLayout> 

Puedes usar android:fillViewport="true" para centrar el contenido. Algo como esto:

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <!-- content --> </ScrollView> 

Establecer el foco en la parte superior de la mayoría de componentes de la interfaz de usuario que desea ver

 <ImageView android:focusable="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:src="@drawable/ic_launcher" /> 
 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" android:padding="10dp" android:background="#cccfff"> <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_margin="28dp" android:background="#ffffff" android:orientation="vertical" android:paddingBottom="40dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="40dp" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/tip_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="12dp" android:text="Title" android:textColor="@color/orange_text" android:textSize="@dimen/font_size_medium" /> <TextView android:id="@+id/tip_description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Description description..." android:textSize="@dimen/font_size_small" /> </LinearLayout> </ScrollView> </LinearLayout> 

Pruebe esto puede satisfacer sus necesidades.

  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#cccfff" android:gravity="center" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="10dp" android:background="#ffffff" android:gravity="center_vertical" android:orientation="vertical" android:paddingBottom="40dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="40dp" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/tip_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="12dp" android:text="Title" /> <TextView android:id="@+id/tip_description" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="biruDescription description..." /> </LinearLayout> </LinearLayout> 

Una línea más en tu código java

 TextView tip_description = (TextView) findViewById(R.id.tip_description); tip_description.setMovementMethod(new ScrollingMovementMethod()); 

Esto desplazará el contenido de su descripción más bien todo el diseño.

Trate de poner el margen y los rellenos en ScrollView

Tal vez no está claro cómo funciona el diseño. En su caso usted necesita fijar una disposición externa que llene el padre y tenga la gravedad fijada como centro, adentro tenga una visión de la voluta con la altura wrap_content del diseño y la disposición interna con la altura wrap_content del wrap del diseño también. A continuación, el diseño externo se centrará en la vista de desplazamiento si es menor.

 <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center"> <ScrollView android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- Content here --> </LinearLayout> </ScrollView> </LinearLayout> 
  • Problema con webview y scrollview
  • Barra de botones inferior de Android y vista de desplazamiento con tema de diálogo
  • Android, LinearLayout no se desplaza
  • Android: crea un LinearLayout que contiene un ListView desplazable
  • Android ScrollView no funciona correctamente
  • ScrollView no está jugando bien con RelativeLayout
  • ¿Cómo cambiar el tamaño del contenido de una webview en android?
  • RelativeLayout dentro de scrollview no se desplaza
  • ¿Cómo desactivar y activar el desplazamiento en Android ScrollView?
  • Gestión de eventos táctiles en ScrollView Android
  • Android: Notificar a Scrollview que el tamaño de su hijo ha cambiado: ¿cómo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.