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 elScroll
. -> No sé por qué no aparece en otrasActivities
. - En orientación horizontal:
ImageView
aparece en la parte inferior de la pantalla. Como otros elementos no caben en la pantalla,Scroll
aparece 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
Image
no aparece. No hay ningúnScroll
(no es necesario porque se ven otros elementos). - En orientación horizontal: aparecen dos
Scrolls
. Uno dentro deFrameLayout
para 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
).