2010-08-25 10 views
5

Tengo un ScrolLView que envuelve un ViewFlipper. El contenido en el ViewFlipper no es de la misma altura, por lo que mi segunda pantalla tiene una larga barra de desplazamiento que sigue y sigue con el contenido en blanco:¿Volver a calcular ScrollView en diferentes vistas de ViewFlipper?

<ScrollView android:id="@+id/outer_scroll" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" android:layout_height="fill_parent" 
android:fillViewport="true"> 
<ViewFlipper android:id="@+id/flipper" 
android:layout_width="fill_parent" android:layout_height="fill_parent"> 

<EditText android:id="@+id/desc" style="@style/DescriptionArea" 
android:layout_width="fill_parent" android:layout_height="wrap_content" 
android:enabled="false" android:focusableInTouchMode="false" 
android:background="@null" /> 

<LinearLayout android:id="@+id/details_root" 
android:orientation="vertical" android:layout_width="fill_parent" 
android:layout_height="fill_parent" android:padding="10dp"> 

<TextView android:id="@+id/item_details" style="@style/DetailsLarge" 
android:textColor="#000" android:visibility="gone" 
android:layout_width="wrap_content" android:layout_height="fill_parent" 
android:text="@string/item_details_tags" /> 
<TextView android:id="@+id/tags" android:layout_width="wrap_content" 
android:layout_height="fill_parent" android:textColor="#000" 
android:visibility="gone" /> 
</LinearLayout> 
</ViewFlipper> 
</ScrollView> 

Así, por ejemplo, el bloque EditarTexto es muy largo, y el la barra de desplazamiento lo captura todo. Me lanzo al LinearLayout, y la barra de desplazamiento continúa pasando el contenido de TextView. Básicamente lo necesito para "recalcular" la altura de la vista.

Además, ajustar EditText y LinearLayout dentro de sus propias ScrollViews no es una opción, porque entonces el teclado suave/virtual bloquea el contenido de EditText.

+0

Wow, acabo de hacer una pregunta similar minutos después de usted ... http://stackoverflow.com/questions/3570362/getting-rid-of-extra-space-in-text-switcher – ekawas

Respuesta

16

Durante la medición, ViewFlipper (así como ViewSwitcher, TextSwitcher etc., todos descendientes de ViewAnimator) se dimensionarán de forma predeterminada según el niño más grande, incluidos los no visibles.

Establecer la bandera MeasureAllChildren en false para cambiar este comportamiento para usar sólo el niño actualmente visible al medir el tamaño:

ViewFlipper flipper = (ViewFlipper)findViewById(R.id.flipper); 
flipper.setMeasureAllChildren(false); 
+0

¡Gracias! buena respuesta. –

5

Si usted está haciendo su viewflipper en XML también se podría utilizar Android: measureAllChildren = "falso".

Cuestiones relacionadas