LinearLayout no se expande dentro de ScrollView
Tengo un LinearLayout
dentro de un ScrollView
que tiene android:layout_height="fill_parent"
, pero no se expande a la altura completa 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 el LinearLayout
no amplía la altura completa del ScrollView
porque en Eclipse en Android Layout Editor
, si selecciono ScrollView
(en el panel Esquema) se resalta con un borde rojo que llena la pantalla al fondo pero Cuando selecciono LinearLayout
su resaltado no se expande a la parte inferior de la pantalla. ¿Cómo puedo conseguir que lo haga?
- Android: El editor XML predeterminado ya no se abre
- RecyclerView item layout_weight, tamaños no actualizados
- GetHeight para View que tiene visibilidad = ido
- ¿Cuál es la diferencia entre layout_gravity = "center_vertical" y layout_centerVertical = "true"
- Cómo ajustar contenido de texto en ActionBarSherlock spinner de navegación
El efecto que estoy tratando de lograr es tener algún texto y un botón debajo de él (dentro del LinearLayout
en el nivel 4 hay sólo 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 que el LinearLayout
contiene el botón se adhiera a la parte inferior de la pantalla.
Al principio pensé que no debía publicar el XML completo porque generalmente es un turn-down para ver un gran trozo 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"
en la problemática LinearLayout
, que hace que el botón se adhiera a la parte inferior de la pantalla, LinearLayout
que LinearLayout
. Pero eso también hace que el texto se adhiera a la parte inferior de la pantalla, que no es exactamente lo que buscaba.
Actualización: cero que, android:layout_gravity="bottom"
hace que el ScrollView
no pueda, así, desplazarse. ¿Otras ideas?
- Cómo ir al icono de Centro en la barra de acción de Android
- Androind 2.2 Vista previa 1 - Uso de ConstraintsLayout con fallos de la aplicación GuideLine
- Cómo agregar mediante programación ImageView en LinearLayout sin espacios adicionales?
- Forzar un texto de edición para ocupar la pantalla completa dentro de una vista de desplazamiento
- Cómo inflar XML-Layout-File correctamente dentro de Custom ViewGroup?
- El botón se escala a la imagen de fondo en lugar del contenido
- RecyclerView: encuentra el último elemento visible inmediatamente después de la vista
- El visualizador de jerarquía de Android no muestra los tiempos para la representación
Encontré la solución al final. El problema no era con el LinearLayout
, sino con el ScrollView
(parece extraño, teniendo en cuenta el hecho de que el ScrollView
estaba expandiendo, mientras que el LinearLayout
no lo era).
La solución era usar android:fillViewport="true"
en el ScrollView
.
Sé que este post es muy antiguo, para aquellos que no quieren usar android:fillViewport="true"
porque a veces no abre el edittext encima del teclado. Utilice el diseño relativo en lugar de LinearLayout que resuelve el propósito.
¿Puede proporcionar su xml de diseño? Hacerlo permitiría a la gente recrear el problema con un esfuerzo mínimo.
Puede que tenga que configurar
android:layout_weight="1"
Para el elemento que desea expandir
He utilizado dinámicamente para conseguir esto. Tengo un LinearLayout y dentro de este ScrollView usado como un niño. Entonces tomo de nuevo LinearLayout y agrego lo que alguna vez vea u quiere a este LinearLayout y luego este LinearLayout agrega a ScrollView y finalmente agrega este ScrollView a LinearLayout. Entonces u puede conseguir el desplazamiento en el ScrollView de la ur y nada dejará a visible.
LinearLayout (Parent) – ScrollView (hijo de LinerLayout) – LinearLayout (hijo de ScrollView) – agrega aquí textView, botones, spinner etc lo que quieras. A continuación, agregue este LinearLyout a ScrollView. Bcoz sólo un CHILD para ScrollView aplicable y último añadir este ScrollView a LinearLyout.If área definida es superior a partir de Tamaño de pantalla entonces u obtendrá un Scroll dentro de ScrollView.
En mi caso no he dado el
Orientación de LinearLayout (Niño de ScrollView)
Así que por defecto toma horizontal, pero scrollview scrols verticalmente, así que compruebe si 'android: orientation = "vertical"' se establece en el ScrollView's Child (En el caso de LinearLayout).
Este era mi caso, espero que ayude a alguien
.
- Buscar todas las apariciones de una cadena en todo el proyecto en Android Studio
- No se encuentra el método Gradle DSL: 'runProguard'