画面上でテキストビュー/ボタンの組み合わせ(水平方向のLinearLayoutに固定されている)を垂直方向に使用しようとしているカスタムビューがあります。現在、私のレイアウトは次のようになっています。
<com.company.widgets.MyCustomView
android:id="@+id/custom"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_weight="0.0" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_marginTop="10dp"
android:layout_alignParentBottom="true"
android:layout_weight="1.0"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|left"
android:layout_marginLeft="15dp"
android:layout_marginRight="5dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#000000"
android:text="foobar" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|right"
android:layout_marginLeft="5dp"
android:layout_marginRight="15dp"
android:text="foobar" />
</LinearLayout>
カスタムビューでは、onMeasure()とonSizeChanged()をオーバーライドしました。ビューのサイズが、渡されたmeasureSpec(onMeasureの場合)またはwidth / height値(onSizeChangedの場合)を超えないように注意します。ただし、私のアクティビティをレイアウトすると、これら2つのメソッドに渡される値は、「画面の垂直方向の高さ全体」を表します。
その結果、私のカスタムビューは、必要なだけの高さになり、button / textviewは、「必要なだけの高さ」(wrap_content)になります。これらの2つの高さが画面の高さを超えると、カスタムビューの下部がボタン/テキストビューの後ろに描画されます。
私の質問:カスタムビューのonMeasure()メソッドやonSizeChanged()メソッドに短い高さの値が渡されるようにレイアウトを変更するにはどうすればよいですか?「画面の高さ-テキストビュー/ボタンの高さ」を表す値を受け取ってほしい。
注:テキストビュー/ボタンがカスタムビューの上に配置されるようにレイアウトを変更すると、渡される高さの値は正しくなります(つまり、画面の高さよりも小さくなります)。