Tengo un LinearLayout
interior ScrollView
que tiene android:layout_height="fill_parent"
, pero no se expande a la altura total del ScrollView
. Mi diseño se parece a:
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
Puedo ver que LinearLayout
no se expande la altura completa del ScrollView
porque, en Eclipse Android Layout Editor
, si selecciono el ScrollView
(en el panel Esquema) se resalta con un borde rojo que llena la pantalla hasta el fondo, pero cuando selecciono el LinearLayout
resaltado no se expande a la parte inferior de la pantalla. ¿Cómo puedo conseguir que lo haga?
El efecto que intento lograr es tener algo de texto y un botón debajo (dentro del LinearLayout
nivel 4 solo 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 para ver el botón. En caso de que el texto no sea lo suficientemente grande para una barra de desplazamiento, quiero LinearLayout
que el botón que contiene se pegue en la parte inferior de la pantalla.
Al principio pensé que no debería publicar el XML completo porque generalmente es un rechazo para ver una gran porción de código en una pregunta. Sin embargo, parece que podría ser necesario, 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 este momento he recurrido a android:layout_gravity="bottom"
la problemática LinearLayout
, lo que hace que el botón se pegue en la parte inferior de la pantalla sin importar qué. Pero eso también hace que el texto se pegue en la parte inferior de la pantalla, que no es exactamente lo que buscaba.
Actualización: rasca eso, android:layout_gravity="bottom"
hace que ScrollView
no puedas, bueno, desplazarte. ¿Otras ideas?
fuente
android:weight
.Sé que esta publicación es muy antigua, para aquellos que no quieren usarla
android:fillViewport="true"
porque a veces no aparece el texto de edición sobre el teclado. Utilice el diseño relativo en lugar de LinearLayout, resuelve el propósito.fuente
¿Puedes proporcionar tu diseño xml? Hacerlo permitiría a las personas recrear el problema con un mínimo esfuerzo.
Puede que tenga que configurar
para el artículo que desea expandir
fuente
La solución es usar
android:fillViewport="true"
en la vista de desplazamiento y, además, intente usar
"wrap_content"
en lugar de"fill_parent"
como"fill_parent"
está en desuso ahora.
fuente
Lo he usado dinámicamente para obtener esto. Tengo un LinearLayout y dentro de esto utilicé ScrollView cuando era niño. Luego tomo nuevamente LinearLayout y agrego lo que quiera ver a este LinearLayout y luego este LinearLayout agrega a ScrollView y finalmente agrega este ScrollView a LinearLayout. Entonces puede obtener desplazamiento en su ScrollView y no quedará nada visible.
LinearLayout (Parent) - ScrollView (child of LinerLayout) - LinearLayout (child of ScrollView) - agregue aquí textView, Buttons, spinner, etc. lo que desee. Luego agregue este LinearLyout a ScrollView. Bcoz solo un NIÑO para ScrollView aplicable y, por último, agregue este ScrollView a LinearLyout. Si el área definida es superior al tamaño de la pantalla, obtendrá un desplazamiento dentro de ScrollView.
fuente
En mi caso no he dado el
Entonces, de manera predeterminada, toma horizontal, pero scrollview se desplaza verticalmente, así que verifique si 'android: orientación = "vertical"' está configurado en el elemento secundario de su ScrollView (en el caso de LinearLayout).
.
fuente