我有一个包装ViewFlipper的ScrolLView。 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>
因此,例如,EditText块非常长,滚动条捕获所有内容。我转向LinearLayout,滚动条继续通过TextView内容。我基本上需要它来“重新计算”视图高度。
此外,将EditText和LinearLayout包装在自己的ScrollViews中不是一个选项,因为软/虚拟键盘会阻止EditText内容。
答案 0 :(得分:19)
在测量期间,ViewFlipper(以及ViewSwitcher,TextSwitcher等 - ViewAnimator的所有后代)默认情况下将根据最大的子项(包括不可见的子项)进行调整。
将MeasureAllChildren标志设置为false,将此行为更改为仅在测量尺寸时使用当前可见的子项:
ViewFlipper flipper = (ViewFlipper)findViewById(R.id.flipper);
flipper.setMeasureAllChildren(false);
答案 1 :(得分:5)
如果你在xml中使用viewflipper,你也可以使用android:measureAllChildren =“false”。