studio react programacion móviles libro desarrollo curso content aplicaciones android android-fragments

react - programacion android pdf 2018



La vista en ScrollView no coincide con el padre como está configurado (3)

Tengo un ViewPager y un ActionBar con pestañas. Una de estas pestañas tiene un ListView y cuando toco una de las opciones en ese ListView, agrego un Fragmento secundario que es la vista detallada de esa fila.

Esa vista de detalle es un ScrollView con un LinearLayout dentro de él. ScrollView es match_parent/match_parent y LinearLayout dentro de ella es width=match_parent y height=wrap_content . En un emulador del tamaño de un teléfono, la vista detallada llena la pantalla como se desea, pero en una tableta, la vista detallada solo cubre parte del ancho de la pantalla ... aunque el ancho de ScrollView y el ancho de LinearLayout son ambos match_parent.

<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rootView" style="@style/RootScrollView"> <LinearLayout android:id="@+id/scrollContentView" style="@style/ScrollViewContent"> ... </LinearLayout> </ScrollView>

Aquí está el estilo para la vista de desplazamiento:

<style name="RootScrollView"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">match_parent</item> </style>

Aquí está el estilo para el contenido de LinearLayout:

<style name="ScrollViewContent"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:paddingLeft">15dp</item> <item name="android:paddingRight">15dp</item> <item name="android:orientation">vertical</item> <item name="android:background">@drawable/image_legal_paper_tile</item> </style>

La vista de contenido tiene un fondo repetido image_legal_paper_tile que es esto:

<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/legal_paper_tile" android:gravity="fill_horizontal" android:tileMode="repeat" />

Por lo tanto, la imagen debe extenderse horizontalmente y repetirse, lo que crea un bloc de papel legal amarillo en el fondo.

Esto es lo que la lista y la vista de detalle se parecen al emulador del teléfono:

Este es el aspecto de la vista de lista y de detalles en una tableta real. El fragmento del bloc de notas amarillo DEBE llenar todo el ancho de la pantalla, pero no lo es.

EDITAR:

Aquí está la imagen de papel legal de fondo:

Tiene 320px de ancho. El emulador del teléfono tiene 480px de ancho y la imagen se estira, correctamente, para llenar el ancho de la pantalla. Luego se repite verticalmente según lo previsto. Sin embargo, no se estira para llenar el ancho de la pantalla en la tableta.

El ancho que se muestra en la tableta NO es el tamaño nativo de la imagen, ya que cambia el tamaño según el contenido. Cuando el fragmento se carga por primera vez, es un ancho. Luego relleno los campos y ejecuto el cálculo que agrega texto en la parte inferior de la vista de contenido. Ese texto es más ancho que el contenido existente y, por lo tanto, cuando se establece el texto, el ancho del fragmento aumenta para admitir el contenido más amplio.

Entonces, en resumen, no, el ancho de la tableta no es el tamaño nativo de la imagen. La imagen se estira, pero no se estira del todo.


He descubierto una solución alternativa, pero no aceptaré esta respuesta y espero que alguien encuentre la respuesta real.

En mi fragmento de vista de lista, el controlador onListItemClick (), puse un par de propiedades (minWidth y minHeight) en el fragmento de detalle. Luego, en el método onCreateView () del fragmento de detalle, establezco el ancho y la altura mínimos para ese valor.

El fragmento de detalle luego llena adecuadamente el espacio y aún permite el desplazamiento, etc.


en ScrollView use android:fillViewport="true" y para el hijo de ScrollView android:height="wrap_content" . Si desea tener muchos hijos con atributos diferentes, conviértalos en un niño principal como contenedor. configúrelo como wrap_content y su hijo como match_parent.

ejemplo:

<ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <LinearLayout android:id="@+id/dynamic_frame" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:id="@+id/dimrix_sub_child" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:visibility="gone" > </LinearLayout> <LinearLayout android:id="@+id/dimrix_sub_child_21" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:visibility="gone" > </LinearLayout> </LinearLayout> </ScrollView>

En este ejemplo, puedo establecer la visibilidad en el código para cada niño y él coincidirá con el padre como desee.


Intente agregar android: fillViewport = "true" a su ScrollView

recuerde que android: layout_height = "fill_parent" significa "establecer la altura a la altura del padre". Obviamente, esto no es lo que quiere cuando usa ScrollView. Después de todo, ScrollView se volvería inútil si su contenido fuera siempre tan alto como él mismo. Para solucionar esto, debe utilizar el atributo ScrollView llamado android: fillViewport. Cuando se establece en verdadero, este atributo hace que el elemento secundario de la vista de desplazamiento se expanda a la altura de ScrollView, si es necesario. Cuando el niño es más alto que el ScrollView, el atributo no tiene ningún efecto.