1

画面上でテキストビュー/ボタンの組み合わせ(水平方向の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()メソッドに短い高さの値が渡されるようにレイアウトを変更するにはどうすればよいですか?「画面の高さ-テキストビュー/ボタンの高さ」を表す値を受け取ってほしい。

注:テキストビュー/ボタンがカスタムビューの上に配置されるようにレイアウトを変更すると、渡される高さの値は正しくなります(つまり、画面の高さよりも小さくなります)。

4

1 に答える 1

0

解決しました。外側の要素をRelativeではなくLinearLayoutにして、重みを逆にします。カスタムビューの重みは「1」で、TextViewとButtonを含むLinearLayoutの重みはゼロである必要があります。これにより、カスタムビューのonMeasure()に渡される高さの値は、textview/buttonによって占められていない画面の部分のみになります。

于 2012-11-01T00:20:46.700 に答える