ScrollView no se desplaza hasta el final del margen inferior del LinearLayout interno
Tengo problemas con un fragmento que consiste en un ScrollView que contiene un LinearLayout. Estoy tratando de crear un efecto donde el LinearLayout tiene un fondo blanco y parece un trozo de papel en un fondo de color. La forma en que estoy tratando de lograr esto es por tener el ScrollView ocupar el espacio completo del fragmento y luego el LinearLayout dentro tiene android:layout_margin="16dp"
para crear el espacio alrededor del "papel".
De esta manera, la barra de desplazamiento de ScrollView aparece en el área de fondo de color, el margen en la parte superior se desplaza junto con el contenido y el margen en la parte inferior sólo se desplaza cuando se llega al final.
- ¿Cómo evitar que una vista de desplazamiento se desplace a una vista web después de cargar los datos?
- Vista de lista de Android dentro de una vista de desplazamiento
- Relleno de ScrollView
- ¿La lógica detrás de startScroll en scroller?
- Recyclerview en un fragmento no muestra nada
Desafortunadamente en esta configuración ScrollView no se desplaza hasta el final y de hecho corta una cantidad muy pequeña del texto en la parte inferior. Sospecho que el ScrollView no está teniendo en cuenta los márgenes de su hijo en su distancia de desplazamiento vertical. Para resolver esto he envuelto el LinearLayout en un FrameLayout que resuelve el problema, pero parece superfluo. Cualquier sugerencia sobre cómo eliminar este recipiente innecesario sería apreciada.
Nota: la configuración de android:padding="16dp"
en ScrollView y la eliminación de los márgenes no tiene el efecto deseado, ya que entonces el relleno aparece en los cuatro bordes continuamente, independientemente de la posición de desplazamiento.
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="wrap_content" tools:context=".ArticleFragment" > <!-- This FrameLayout exists purely to force the outer ScrollView to respect the margins of the LinearLayout --> <FrameLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="10dp" android:layout_margin="16dp" android:background="@color/page_background" > <TextView android:id="@+id/article_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:textIsSelectable="true" /> <TextView android:id="@+id/article_content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textIsSelectable="true" /> </LinearLayout> </FrameLayout> </ScrollView>
- No se puede desplazar en el fragmento de diálogo
- Añadiendo un lineal lineal dinámico a la vista actual android
- Cómo ocultar barra de herramientas / barra de herramientas mientras desplaza hacia abajo en Webview
- Android - ajustar scrollview cuando el teclado está para Android 5.0 (piruleta)
- Android: ¿cuál es mejor, viewpager, galería, vista de desplazamiento horizontal ... o?
- Cómo utilizar Recyclerview dentro de Scrollview
- ¿Cómo hacer Pan automático (desplazamiento) con AChartEngine gráfico de línea dinámica junto con el eje X?
- Android 5.0 Datepicker en scrollview no funciona (no se desplaza meses)
Recuerdo haber tenido problemas con el ScrollView
alguna manera no llegar al final de su contenido cuando el diseño del contenido tenía un margen superior. Resolví el problema con un pequeño hack, agregando una vista vacía al final del LinearLayout
:
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context=".ArticleFragment" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="10dp" android:layout_margin="16dp" > <TextView android:id="@+id/article_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:textIsSelectable="true" android:background="@color/page_background" /> <TextView android:id="@+id/article_content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textIsSelectable="true" android:background="@color/page_background" /> <!-- Add a little space to the end --> <View android:layout_width="fill_parent" android:layout_height="30dp" /> </LinearLayout> </ScrollView>
Utilicé una vista vacía similar también en el principio del LinearLayout
para evitar márgenes superiores / inferiores completamente.
EDIT: Acabo de darme cuenta de que también quería que el final del "papel" aparezca al llegar al final de la vista. En ese caso, puede que desee establecer el color de fondo en el TextView
s en lugar del diseño en sí. A continuación, asegúrese de que no hay margen entre el título y el artículo (uso de relleno como separación).
EDIT2: Debo aprender a comprobar cuando se hicieron las preguntas … Bueno, tal vez esto todavía ayuda a alguien. 🙂
La pregunta es vieja, pero he tenido problemas con ScrollView que se comportó mal al envolver FrameLayout. También no parece considerar los márgenes de las disposiciones contenidas. Puede reemplazar FrameLayout por otro LinearLayout de un solo hijo, que debe medir correctamente. Me gustaría haber eliminado el FrameLayout completamente y simplemente agregó el margen sumado con relleno en el diseño interior:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="26dp" android:background="@color/page_background" > <!--...-->
Me deshaceré de FrameLayout
y haré que LinearLayout
el hijo del ScrollView
con match_parent
como la altura del diseño. Si todavía no funciona, considere la posibilidad de reemplazar el margen inferior por otra View
arbitraria con la altura y el fondo deseados como el último elemento en LinearLayout
.
- Registro de Android de video cuadrado
- Cómo limitar los cambios de página de ViewPager a uno por gesto