我有一個自定義視圖,我嘗試在垂直方向上使用在屏幕下方定位的文本視圖/按鈕組合(卡在水平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)或寬度/高度值(對於onSizeChanged)。但是,當我的活動佈局時,傳遞給這兩種方法的值表示「屏幕的整個垂直高度」。
因此,我的自定義視圖最終將自己設置爲高度,並且按鈕/文本視圖使自己「儘可能高」(wrap_content)。當這兩個高度超過屏幕的高度時,自定義視圖的底部將按的繪製按鈕/文本視圖。
我的問題:我應該如何修改佈局,以便我的自定義視圖的onMeasure()和/或onSizeChanged()方法傳遞一個較短的高度值?我希望他們收到代表「屏幕高度 - textview /按鈕高度」的值。
注意:如果我更改佈局以使textview /按鈕位於上方以上,則自定義視圖中傳遞的高度值是正確的(即小於屏幕高度)。
我不明白你試圖完成什麼,也許包括一個截圖。另外,您應該考慮更改組成視圖的對象,而不是重寫onMeasure和onSizeChanged。這聽起來像你應該看看一個RelativeLayout而不是使用LinearLayout。 – Chris
我的自定義視圖實際上是一個日曆小部件,允許用戶在幾天內點擊。由於這是一個自定義的視圖,我自己做測量和繪畫,所以我確實需要重寫onMeasure()和onSizeChanged()。我希望能夠完成的是textview /按鈕組合體佔用所需的高度(wrap_content),並使自定義視圖自行調整以消耗textview /按鈕組合所使用的所有屏幕高度。 – jph