Agregar vista a la parte inferior del diseño dentro de una vista de desplazamiento

Así que mi diseño se ve básicamente así:

<ScrollView> <RelativeLayout> <BunchOfViews/> <ImageView android:layout_alignParentBottom="true"/> </RelativeLayout> </ScrollView> 

Tengo el ScrollView así que toda la disposición siempre es visible no importa la altura de la pantalla. El problema es que en una pantalla muy alta, todavía quiero que mi ImageView esté en la parte inferior. Sin embargo, un niño de un ScrollView no parece tener un fondo definido. La View se coloca en la parte superior del diseño. ¿Cómo puedo resolver este problema de una manera ordenada?

Me encontré con el mismo problema. Nunca pude encontrar una solución muy agradable, pero aquí es cómo lo hice. Tal vez alguien más tiene una mejor manera, odio añadir diseños que no hacen nada.

Mi hack fue añadir un dummy linearlayout en la parte inferior del scrollview que tiene fill_parent para ocupar toda la sala y forzar el scrollview para llenar la pantalla. A continuación, añada el componente que quiera a ese lineal.

Aquí está uno de mis diseños que hace esto:

 <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:fillViewport="true" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginTop="15px" > <!-- bunch of components here --> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/spinner" android:layout_marginTop="5px" android:gravity="center_horizontal|bottom" android:paddingTop="2px" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="20px" android:paddingRight="20px" android:text="Delete" /> </LinearLayout> </RelativeLayout> </ScrollView> 

Tuve el mismo problema y encontré esta página:

http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/

Básicamente, se establece el android:fillViewport de ScrollView android:fillViewport a true, lo que permitirá que la vista secundaria se expanda a la misma altura que ScrollView, llenando el espacio. A continuación, sólo tiene que tener uno de los controles de los niños ' layout_height conjunto de fill_parent y layout_weight a 1 , haciendo que el control de "primavera" para llenar el espacio vacío.

Tenga en cuenta que si el contenido de ScrollView ya es lo suficientemente alto para llenar el ScrollView, el android:fillViewport no tiene ningún efecto, por lo que el ajuste sólo se activa cuando sea necesario.

Mi XML final se parece a esto:

 <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:fillViewport="true"> <LinearLayout android:orientation="vertical" android:layout_height="wrap_content"> <LinearLayout android:layout_height="fill_parent" android:layout_weight="1"> <!-- this expands to fill the empty space if needed --> </LinearLayout> <!-- this sits at the bottom of the ScrollView, getting pushed out of view if the ScrollView's content is tall enough --> <ImageView android:layout_height="wrap_content" android:src="@drawable/footer_image"> </ImageView> </LinearLayout> </ScrollView> 

Parece que el linearlayout no es necesario, todo lo que es importante es el fillViewPort. Solo puedes usar

  <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottomParent="true"> 

Ahora que usted ha especificado el relativelayout para ser por lo menos el tamaño de la pantalla.

Su trabajo para mí perfectamente androide: fillViewport = "true"

En tu opinión de que quieres estar en la parte inferior, usa android: gravity = "bottom"

La respuesta de Joel Malone Añadir vista a la parte inferior del diseño dentro de una vista de desplazamiento hace ese truco. Mi solución es casi la misma, excepto que utilizo Space widget Space para hacer el trabajo de llenar la altura de descanso dentro del diseño padre. Me gusta esto:

 <ScrollView android:layout_width="match_parent" android:layout_height="match_parent android:fillViewport="true" > <LinearLayout android:orientation="vertical" android:layout_height="wrap_content" > <android.support.v4.widget.Space android:layout_height="match_parent" android:layout_weight="1" /> <ImageView android:layout_height="wrap_content" android:src="@drawable/footer_image" /> </LinearLayout> </ScrollView> 

Atención:

  • fill_parent en las otras respuestas se observa como desaprobado durante mucho tiempo;
  • Compare a un LinearLayout vacío para rellenar el resto del diseño de los padres, creo que Space es mucho más apropiado (está diseñado para hacer ese trabajo).
  • Por último, no olvides ese atributo importante al principio de ScrollView : android:fillViewport="true" . Ellos juntos hacen este truco.

Desde: http://code.google.com/p/k9mail/source/browse/k9mail/trunk/res/layout/account_setup_basics.xml?r=1314

Esto le ayudará a:

 <RelativeLayout android:layout_marginTop="-45dip" android:padding="0dip" android:layout_alignParentBottom="true" android:gravity="bottom|right" android:background="@android:drawable/bottom_bar" android:layout_height="fill_parent" android:layout_width="fill_parent"> <Button android:id="@+id/manual_setup" android:text="@string/account_setup_basics_manual_setup_action" android:minWidth="@dimen/button_minWidth" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginBottom="-4dip" android:layout_alignParentLeft="true" android:layout_centerVertical="false" /> <Button android:id="@+id/next" android:text="@string/next_action" android:minWidth="@dimen/button_minWidth" android:layout_height="wrap_content" android:layout_width="wrap_content" android:drawableRight="@drawable/button_indicator_next" android:layout_marginBottom="-4dip" android:layout_alignParentRight="true" android:layout_centerVertical="false" /> </RelativeLayout> 
 ScrollView view = new ScrollView( this ); ScrollView.LayoutParams lps = new FrameLayout.LayoutParams( FILL_PARENT, FILL_PARENT, Gravity.CENTER ); LinearLayout layout = new LinearLayout( this ); // what ever you want in the Layout view.addView( layout, lps ); 
  • SetSupportActionBar no funciona FragmentActivity
  • Evitar el cambio de orientación de Android en ciertos dispositivos
  • ¿Cómo hacer esto más eficiente?
  • ¿Cuál es la diferencia entre StaticLayout y DynamicLayout?
  • ¿Cómo obtengo el siguiente resultado utilizando RelativeLayout?
  • Obtener vista de niño en un RelativeLayout
  • ¿Qué sucede si utilizo el mismo id para varios widgets en diferentes diseños?
  • ¿Cómo accedo a las vistas dentro del diseño cuando la reutilizo varias veces?
  • addView no funciona
  • Diseño de interfaz de usuario de Android
  • Ejemplo simple de uso de <merge> y <include> en diseños XML de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.