1

我有一個XML佈局,我在一個LinearLayout中嵌套了一個FrameLayout,並試圖在FrameLayout之上堆疊一個兄弟查看組。它根本不顯示兄弟觀看組,但只是FrameLayout。我希望得到一些幫助,理解爲什麼將根ViewGroup替換爲RelativeLayout會產生預期的輸出。爲什麼LinearLayout不能正確顯示嵌套的FrameLayout?

這裏的佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/mainFrameLayout" 
     android:background="#787878"/> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 
     <ImageView 
      android:id="@+id/ImageView01" 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" 
      android:src="@drawable/download" 
      android:adjustViewBounds="true"/> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textColor="#000" 
      android:textSize="40sp" 
      android:text="Top text" /> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:gravity="right" 
      android:text="bottom_text" 
      android:textColor="#fff" 
      android:textSize="50sp" /> 
</LinearLayout> 

</LinearLayout>

我只把自己看到的FrameLayout填充屏幕。當我將根ViewGroup更改爲使用layout_height和layout_width定義的RelativeLayout爲「match_parent」時,我得到了我的預期輸出,其中ImageView和兩個TextView都顯示在FrameLayout的頂部。我很困惑它是如何工作的,因爲我沒有爲子ViewGroups/View指定任何RelativeLayout參數,如「bottomof」或「topof」。

是否存在RelativeLayout具有LinearLayout不具有的調整尺寸或重量分佈?我一直在網上查找,但不幸的是還沒有找到答案。

謝謝!

回答

4

在你表現出的代碼,所述第一匹配FrameLayout父高度,使隨後的LinearLayout被推離屏下方(y軸,而不是Z軸)的FrameLayout。這是因爲他們的父母是一個LinearLayout,它將兒童垂直放置在另一個的下方(y軸),不重疊(如在每張視圖是紙方格的一卷藤製紙中)。

如果你想要孩子FrameLayoutLinearLayout要對其他(Z軸)的頂部他們的父母必須是一個FrameLayout,其排列是孩子一個在z軸的其他overlaping的頂部(如在一疊紙張中)。

至於爲什麼RelativeLayout沒有指定佈局參數給你你期望的行爲,這是因爲默認的是發生在頂子視圖留下角落容器(從RelativeLayout documentation):

通過默認情況下,所有子視圖都在佈局的左上角繪製,因此您必須使用RelativeLayout.LayoutParams中提供的各種佈局屬性來定義每個視圖的位置。

+0

完美的解釋,謝謝你的幫助frozenkoi! – blkhatpersian

+0

@frozenkoi +1用於闡明不同佈局之間的差異,並進一步描述RelativeLayout的默認行爲。謝謝! –

0

您應該從FrameLayout中刪除match_parent,因爲垂直方向上的Linearlayout將視圖一個接一個放置。

在你的情況下,FrameLayout負責獲取整個設備屏幕,因此剩餘的視圖被推到屏幕外。

相關問題