studio rotación rotacion reinicie que programacion pantalla orientacion móviles movil manejando girar evitar detectar desarrollo curso como cambio aplicaciones activity android imageview scrollview framelayout

rotación - La imagen de Android se ve/no se ve cuando se cambia la orientación



manual de programacion android pdf (1)

Tengo algunos problemas con ScrollView y un ImageView .

Lo que quiero es:

Tengo un conjunto de ImageView siempre en la parte superior de la pantalla. Luego, tengo un ScrollView donde van todos los elementos de la View , y dentro de él tengo otra ImageView que se establece en la parte inferior de la pantalla cuando los elementos anteriores no llenan la pantalla (generalmente Big Screens), y se establece en la parte inferior de ScrollView cuando existe Scroll.

Está bien para otras Activities que tengo, pero tengo algunos problemas en una Activity que tiene un FrameLayout .

Lo que obtengo es:

(Vea el código a continuación) Cuando configuro en RelativeLayout de ImageView (el que se queda en la parte inferior) height = "wrap_content" :

  • En orientación vertical: la Image no tiene su tamaño real porque no cabe en la pantalla. Para caber en él, debe aparecer el Scroll . -> No sé por qué no aparece en otras Activities .
  • En orientación horizontal: ImageView aparece en la parte inferior de la pantalla. Como otros elementos no caben en la pantalla, Scroll aparece dentro de FrameLayout .

Cuando configuro la RelativeLayout de ImageView (la que se queda en la parte inferior) height = "200dp" (la altura real de la imagen es menor):

  • En orientación vertical: la Image no aparece. No hay ningún Scroll (no es necesario porque se ven otros elementos).
  • En orientación horizontal: aparecen dos Scrolls . Uno dentro de FrameLayout para los elementos, y otro para ver el ImageView .

Aquí está mi código actualizado:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="fill_parent" tools:context=".FacturasActivity" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayoutLogoFactor_factura" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" > <ImageView android:id="@+id/imageViewLogoFactor_factura" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/logo_factorenergia"/> </LinearLayout> <ScrollView android:id="@+id/scrollViewMain" android:layout_width="fill_parent" android:layout_height="fill_parent" android:fillViewport="true" > <LinearLayout android:id="@+id/linearLayoutMain2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_gravity="center_horizontal" android:focusable="true" android:focusableInTouchMode="true" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayoutDireccionFactura" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="25dp" android:layout_marginRight="25dp" android:layout_marginTop="10dp" android:weightSum="1.0"> <TextView android:id="@+id/textViewlabelDireccionFactura" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.3" android:text="@string/etiqueta_direccion" android:textSize="@dimen/textSize" android:textStyle="bold" /> <TextView android:id="@+id/textViewDireccion" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.7" android:textSize="@dimen/textSize" /> </LinearLayout> <FrameLayout android:id="@+id/frameLayoutFacturas" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="25dp" android:layout_marginRight="25dp" android:layout_marginTop="10dp" > <ListView android:id="@android:id/list" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/facturas_vacia" android:textSize="@dimen/textSize" /> </FrameLayout> <RelativeLayout android:id="@+id/linearLayoutImagenInferior_main" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" > <ImageView android:id="@+id/imageViewImagenInferior_main" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:adjustViewBounds="true" android:src="@drawable/la_electrica_de_las_empresas" /> </RelativeLayout> </LinearLayout> </ScrollView> </LinearLayout>

¿Me puedes ayudar? Gracias por adelantado.


La solución que encontré al analizar esa pregunta es:

Crea esa función:

public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); }

y llámalo con mi ListView. Solo se ve y usa un Scroll (el de ScrollView ).