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?
- Cómo dejar que el ImageView y el TextView tengan la misma altura
- Gaveta de navegación Atributo de diseño específico de la API de Android
- Android: la gravedad falla en API 18+
- Falta el puerto reenviado en el Visor de jerarquía: Uso de Android Studio
- Android agrega ID a un diseño
- Cómo establecer la propiedad "android: drawableTop" de un botón en tiempo de ejecución
- Android Establecer ImageButton como Toggle
- Android cómo obtener altura y ancho en onCreateView
- WebView height = wrap_content con cambiar el tamaño de fuente no funciona
- Arrastre para cambiar el tamaño dinámico de un par de diseños adyacentes en Android
- Disposición de ancho de porcentaje de Android
- Obtener un inflador de diseño desde el ApplicationContext
- Implementación de Android recientemente diseñado y directrices de interfaz de usuario en las versiones 2.x
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 queSpace
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.
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 );