2016-04-29 52 views
-1

設置我有一個佈局,看起來大致是這樣的:的RelativeLayout無視大小的孩子

<RelativeLayout> 
    <TextView 
    layout_width="match_parent" 
    layout_height="50dp" 
    layout_alignParentTop="true" 
    id="@+/A"/> 
    <TextView 
    layout_width="match_parent" 
    layout_height="46dp" 
    layout_alignParentBottom="true" 
    id="@+/B"/> 
    <CustomView 
    layout_width="wrap_content" 
    layout_height="wrap_content" 
    layout_below="@id/A" 
    layout_above="@id/B" 
    layout_centerHorizontal="true"/> 
</RelativeLayout> 

的目的是,A和B應該在頂部和底部的固定高度,CustomView應該採取儘可能多的剩餘空間,因爲它可能會受到其縱橫比的限制。 (請注意,我不能使用,因爲我省略了一些其他孩子的LinearLayout)

下面是一個特定的屏幕尺寸會發生什麼:

  • CustomView.onMeasure被調用(AT_MOST 776,AT_MOST 395)
  • CustomView調用setMeasuredDimension(285,391)
  • CustomView.onMeasure與再次調用(確切285,整整251)
  • CustomView調用setMeasuredDimension(參數似乎並不重要)
  • CustomView.onLayout調用尺寸285 X 251

我猜頂和底部的制約力的高度是251,但爲什麼不給RelativeLayout的一個CustomView機會,選擇在此基礎上高度約束的寬度?看來RelativeLayout的錯誤行爲假設如果一個孩子可以是285x391,那麼它也可以是285x251。是否有解決方法(除了用另一個自定義視圖替換RelativeLayout)?

我使用minSdkVersion = 14和targetSdkVersion = 21,以防萬一。

回答

0

我寫了這樣的代碼

`

<RelativeLayout 
    android:layout_width="wrap_content" 
    android:background="@color/material_blue_grey_800" 
    android:layout_height="wrap_content"> 

    <TextView android:id="@+id/A" 
     android:layout_width="match_parent" 
     android:layout_alignParentTop="true" 
     android:text="TOP TEXT" 
     android:textColor="#ff0000" 
     android:layout_height="50dp" /> 

    <TextView android:id="@+id/B" 
     android:layout_width="match_parent" 
     android:layout_alignParentBottom="true" 
     android:text="Bottom text" 
     android:textColor="#00ff00" 
     android:background="#820f22" 
     android:layout_height="50dp" /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/A" 
     android:layout_above="@+id/B" 
     android:background="#0ff0ff" 
     android:src="@drawable/abc_btn_check_material" 
     android:layout_centerInParent="true"/> 


</RelativeLayout> 

`

,你可以檢查它的工作爲我好,你可以試着改變你的自定義視圖高度,以「match_parent」和刪除重力方向

+0

我嘗試使用wrap_content/match_parent的高度和centerInParent/centerHorizo​​ntal/no gravity的所有組合。對於高度受限的情況,所有產生這個:http://i.imgur.com/vrE0qxa.png。注意aqua背景表明ImageView不是方形的,儘管圖像在ImageView中居中。也許我不能認爲CustomView可以選擇其縱橫比。 – stewbasic

-1

只是把重量和身高匹配父母中心視圖,也可以刪除layout_above,你可以在我的代碼中找到。

<RelativeLayout> 
    <TextView 
    layout_width="match_parent" 
    layout_height="50dp" 
    layout_alignParentTop="true" 
    id="@+/A"/> 
    <TextView 
    layout_width="match_parent" 
    layout_height="46dp" 
    layout_alignParentBottom="true" 
    id="@+/B"/> 
    <CustomView 
    layout_width="wrap_content" 
    layout_height="match_parent" 
    layout_below="@id/A" 
    weight=1 
    layout_centerHorizontal="true"/> 
</RelativeLayout> 

這背後的代碼工作的原因是你的頂部和底部的觀點有修正值,佈局必須做出空間甚至中心視圖都有1 對不起錯字的權重。

+0

layout_weight在RelativeLayout中沒有效果 http://stackoverflow.com/a/31345745/1710519 刪除layout_above會導致孩子伸展到底部 http://i.imgur.com/yRZaYpo.png – stewbasic

相關問題