LinearLayout no expandir el interior de un ScrollView
-
25-09-2019 - |
Pregunta
Tengo un LinearLayout
dentro de un ScrollView
que tiene android:layout_height="fill_parent"
, pero no se expande a toda la altura de la ScrollView
. Mi diseño se ve algo como:
level layout layout_width layout_height
1 LinearLayout fill_parent fill_parent
2 LinearLayout fill_parent wrap_content
3 (some irrelevant stuff)
2 ScrollView fill_parent fill_parent <-- this expands full height
3 LinearLayout fill_parent fill_parent <-- this does not (has orientation=vertical)
(following stuff probably are irrelevant, but just to be sure:)
4 TextView fill_parent fill_parent
4 LinearLayout fill_parent wrap_content
Me puede ver que el LinearLayout
no se expande en toda la altura de la ScrollView
porque en Eclipse en Android Layout Editor
, si selecciono la ScrollView
(en el panel de esquema) que se resalta con un borde rojo que llena la pantalla a la parte inferior pero cuando selecciono la LinearLayout
su punto culminante no se expande a la parte inferior de la pantalla. ¿Cómo puedo conseguir que lo haga?
El efecto que estoy tratando de lograr es tener un poco de texto y un botón debajo de él (dentro de la LinearLayout
en el nivel 4 sólo hay un botón). El texto puede ser lo suficientemente grande como para necesitar una barra de desplazamiento, en cuyo caso, quiero que el usuario tenga que desplazarse hacia abajo con el fin de ver el botón. En caso de que el texto no es lo suficientemente grande para una barra de desplazamiento, quiero que el LinearLayout
que contiene el botón que se adhieren a la parte inferior de la pantalla.
Al principio pensé que no debería registrar el XML completo porque es por lo general un giro hacia abajo para ver una gran parte de código en una pregunta. Sin embargo, parece que podría ser necesaria, así que aquí está el diseño completo.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/video_layout"
android:focusable="true"
style="@style/VideoLayout">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:foreground="@android:drawable/ic_media_play"
android:foregroundGravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/video_thumb"
android:padding="5dip"
android:background="#454545"/>
</FrameLayout>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true"
style="@style/VideoTitle"
android:id="@+id/video_title"
android:layout_gravity="center"
android:layout_weight="1"/>
</LinearLayout>
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<!-- this ScrollView expands the full height of the screen.
However, the next LinearLayout does not expand the full height of the ScrollView -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:layout_gravity="fill"
android:orientation="vertical"
android:id="@+id/info_layout">
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/info_body"
style="@style/InfoText"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
style="@android:style/ButtonBar">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:text="@string/button_readmore"
android:id="@+id/btn_read_more"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
En el momento en que he recurrido a android:layout_gravity="bottom"
en el LinearLayout
problemática, lo que hace que el palo de botón a la parte inferior de la pantalla no importa qué. Pero eso también hace que el palo de texto a la parte inferior de la pantalla, lo cual no es exactamente lo que estaba buscando.
Actualización: que cero, android:layout_gravity="bottom"
hace que el ScrollView
no puede, así, de desplazamiento. Otras ideas?
Solución
encontrado la solución a mí mismo en el final. El problema no fue con el LinearLayout
, pero con la ScrollView
(parece extraño, teniendo en cuenta el hecho de que el ScrollView
era en expansión, mientras que el LinearLayout
no lo era).
La solución fue usar android:fillViewport="true"
en la ScrollView
.
Otros consejos
Sé que este post es muy antiguo, para aquellos que no quieren usar android:fillViewport="true"
porque a veces no abrir el EditarTexto parte superior del teclado.
Utilizar disposición relativa en lugar de LinearLayout que resuelve el propósito.
Se puede proporcionar a su disposición xml? Si lo hace, permitiría a las personas para recrear el problema con el mínimo esfuerzo.
Puede ser necesario configurar
android:layout_weight="1"
para el elemento que desea expandiste
he utilizado de forma dinámica para conseguir esto. Tengo un LinearLayout y dentro de esta acostumbrado ScrollView como un niño. Entonces tomo de nuevo LinearLayout y añadir a lo que cada vez Ver u quieren a este LinearLayout y entonces este LinearLayout añadir a ScrollView y finalmente añadir esta ScrollView a LinearLayout. Entonces u puede conseguir de desplazamiento en ur ScrollView y nada se dejó al visibles.
LinearLayout (Padre) - ScrollView (hijo de LinerLayout) - LinearLayout (hijo de ScrollView) - añadir aquí Textview, botones, etc spinner lo quieres. A continuación, añadir esta LinearLyout a ScrollView. Bcoz un solo hijo para ScrollView complemento aplicable y por última vez este ScrollView a LinearLyout.If zona definida está exceda del tamaño de la pantalla a continuación, u conseguirá un desplazamiento dentro de ScrollView.
En mi caso no he dado el
orientación de LinearLayout (Child de ScrollView)
Así que por defecto se toma horizontal, pero scrols ScrollView verticalmente, así que por favor, compruebe si 'android: orientation = "vertical"'. Se ajusta a su niño de ScrollView (En el caso de LinearLayout)
Esta fue mi caso la esperanza de que ayude a alguien
.
La solución es utilizar
android:fillViewport="true"
en Vista de desplazamiento y, además, tratar de uso
"wrap_content"
en lugar de "fill_parent"
como "fill_parent"
Ahora está en desuso.