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> 
  • RelativeLayout dentro de ScrollView con allignParentBottom
  • Android: crea un LinearLayout que contiene un ListView desplazable
  • ViewPager en ScrollView
  • Efecto de desplazamiento con múltiples visualizadores
  • Actualización de contenido de ScrollView
  • Android RelativeLayout alinear preocupación
  • ¿Cómo puedo ajustar las interacciones con ScrollView, de modo que los usuarios no se muevan accidentalmente en la dirección equivocada?
  • Android: Altura total de ScrollView
  • Android - varias vistas de desplazamiento verticales en scrollview horizontal
  • ¿Cómo trabajar, cuando listview dentro del scrollview?
  • Vista ScrollView con niños, cómo interceptar desplazamiento condicional
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.