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)或寬度/高度值(對於onSizeChanged)。但是,當我的活動佈局時,傳遞給這兩種方法的值表示「屏幕的整個垂直高度」。

因此,我的自定義視圖最終將自己設置爲高度,並且按鈕/文本視圖使自己「儘可能高」(wrap_content)。當這兩個高度超過屏幕的高度時,自定義視圖的底部將按繪製按鈕/文本視圖。

我的問題:我應該如何修改佈局,以便我的自定義視圖的onMeasure()和/或onSizeChanged()方法傳遞一個較短的高度值?我希望他們收到代表「屏幕高度 - textview /按鈕高度」的值。

注意:如果我更改佈局以使textview /按鈕位於上方以上,則自定義視圖中傳遞的高度值是正確的(即小於屏幕高度)。

+0

我不明白你試圖完成什麼,也許包括一個截圖。另外,您應該考慮更改組成視圖的對象,而不是重寫onMeasure和onSizeChanged。這聽起來像你應該看看一個RelativeLayout而不是使用LinearLayout。 – Chris

+0

我的自定義視圖實際上是一個日曆小部件,允許用戶在幾天內點擊。由於這是一個自定義的視圖,我自己做測量和繪畫,所以我確實需要重寫onMeasure()和onSizeChanged()。我希望能夠完成的是textview /按鈕組合體佔用所需的高度(wrap_content),並使自定義視圖自行調整以消耗textview /按鈕組合所使用的所有屏幕高度。 – jph

回答

0

解決了它。使外部元素爲LinearLayout而不是Relative,並反轉權重。自定義視圖應該具有權重「1」,並且包含TextView和Button的LinearLayout應該具有權重零。這會導致傳遞給我的自定義視圖的onMeasure()的高度值僅爲屏幕上未被textview /按鈕佔據的部分。