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
Imageno tiene su tamaño real porque no cabe en la pantalla. Para caber en él, debe aparecer elScroll. -> No sé por qué no aparece en otrasActivities. - En orientación horizontal:
ImageViewaparece en la parte inferior de la pantalla. Como otros elementos no caben en la pantalla,Scrollaparece dentro deFrameLayout.
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
Imageno aparece. No hay ningúnScroll(no es necesario porque se ven otros elementos). - En orientación horizontal: aparecen dos
Scrolls. Uno dentro deFrameLayoutpara los elementos, y otro para ver elImageView.
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 ).