5

ViewFlipper をラップする ScrollLView があります。ViewFlipper のコンテンツは同じ高さではないため、2 番目の画面には非常に長いスクロール バーがあり、空白のコンテンツが表示されます。

<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 を独自の ScrollView 内にラップすることはできません。これは、ソフト/仮想キーボードが EditText コンテンツをブロックするためです。

4

2 に答える 2

20

測定中、ViewFlipper (および ViewSwitcher、TextSwitcher など - ViewAnimator のすべての子孫) は、デフォルトで、非表示のものを含む最大の子に従ってサイズ変更されます。

サイズの測定時に現在表示されている子のみを使用するようにこの動作を変更するには、MeasureAllChildren フラグを false に設定します。

ViewFlipper flipper = (ViewFlipper)findViewById(R.id.flipper);
flipper.setMeasureAllChildren(false);
于 2010-08-26T08:04:36.687 に答える
5

xml で viewflipper を実行している場合は、android:measureAllChildren="false" も使用できます。

于 2012-01-17T13:19:48.480 に答える