4

我想做一個選擇ListActivity,類似於用於向快速啓動屏幕添加快捷方式的選項。我已經推出了自己的頁眉和頁腳,我希望在屏幕上在視圖的頂部和底部「粘」。爲了做到這一點,我使用了一個RelativeLayout,頭部設置爲頂部,頁腳設置爲底部,列表設置爲低於頁眉和頁腳上方。就整個活動的佈局而言,這是我所期望的渲染。標題粘到頂部,頁腳粘到底部,列表滾動到它們之間。Android的RelativeLayout和wrap_content的高度?

當我切換到RelativeLayout作爲我的根時發生了一件奇怪的事情。請看下面的截圖:

enter image description here

我想我的活動的身高是wrap_content,這樣的形式是隻高在它顯示的內容,但一旦我切換到RelativeLayout的,似乎呈現該活動有效地作爲fill_parent,佔據整個屏幕,即使內容不保證。請注意,沒有足夠的列表項填充屏幕,其中fill_parent樣式會在列表末尾和頁腳之間留下一堆空白。我正在通過樣式設置我的高度 - 這與LinearLayout運行良好,但現在似乎被忽略。所以我試着直接在RelativeLayout上硬編碼高度,但它仍然不起作用,仍然呈現爲fill_parent

這裏是我的佈局代碼:

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        style="@style/GroupsList" 
        android:layout_height="wrap_content"> 

     <FrameLayout android:layout_height="wrap_content" 
        android:layout_width="fill_parent" 
        android:id="@+id/hdrGroups" 
        android:layout_alignParentTop="true"> 
      <include layout="@layout/title" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"> 
      </include> 
     </FrameLayout> 

     <FrameLayout style="@style/MyFooter" 
        android:layout_height="wrap_content" 
        android:layout_width="fill_parent" 
        android:layout_alignParentBottom="true" 
        android:id="@+id/ftrGroups"> 
      <ImageView style="@style/CloseButton" 
         android:layout_height="wrap_content" 
         android:layout_width="wrap_content" 
         android:src="@drawable/add" 
         android:id="@+id/imgGroupsAdd" 
         android:clickable="true"> 
      </ImageView> 
     </FrameLayout> 

     <ListView android:divider="#9f9f9f" 
        android:id="@+id/android:list" 
        android:choiceMode="singleChoice" 
        android:dividerHeight="1dp" 
        android:layout_height="wrap_content" 
        android:layout_width="fill_parent" 
        android:layout_below="@id/hdrGroups" 
        android:layout_above="@id/ftrGroups"> 
     </ListView> 

     <TextView android:text="@string/browser_no_groups" 
        style="@style/ListedItemB" 
        android:id="@+id/android:empty" 
        android:layout_height="wrap_content" 
        android:layout_above="@id/ftrGroups" 
        android:layout_below="@id/hdrGroups" 
        android:layout_width="fill_parent"> 
     </TextView> 
    </RelativeLayout> 

所有的佈局是通過XML完成的,......我不是在做任何代碼的佈局。 如何獲得粘性頁眉和頁腳,同時使整個活動在wrap_content模式下表現出高度?有沒有其他方式我應該去關於這個而不是RelativeLayout?

+0

您能夠發佈更完整的代碼示例複製截圖和問題?我的朋友和我有一個想法,但我們懶得把你沒有提供的遺失物品放在一起。 –

+0

我會在接下來的幾天裏看看我能不能把東西扔在一起。 – eidylon

+0

嗯,我終於有機會,並舉了一個例子...在這裏找到它:http://dl.dropbox.com/u/19767586/layout.test.zip。我還包括兩個屏幕,一個是它的外觀,一個是它應該看起來像。 – eidylon

回答

24

根據開發者文檔所需的行爲是不可能的相對佈局;(

「需要注意的是,你不能有RelativeLayout的大小和它的孩子們的位置之間循環依賴。例如,你。不能有一個RelativeLayout的,其高度設爲WRAP_CONTENT和兒童設置爲ALIGN_PARENT_BOTTOM。「

RelativeLayout

解決你的問題,你也許可以嘗試使用線性佈局,設置爲wrap_content並設置通過代碼最大高度屏幕高度

你可以在屏幕高度,這裏所描述get screen height

+0

Drat!哦,好吧......在此期間我已經重新編寫了一個不同的佈局,但這肯定會很好。 : - ? – eidylon

+1

我有完全相同的問題。最好的Android碎片。如果列表足夠長,LinearLayout將旋轉佈局的頁腳,使其在底部壓縮到零。好難過。 – halxinate

+0

我想在底部視圖之上放置另一個視圖,但是我遇到了這個問題,所以我按照逆序排列:將頂部視圖設置爲'ALIGN_PARENT_TOP'(從問題轉義)並將底部視圖設置爲'layout_below'。我的問題,然後修復 –

0

我只是改變我的RelativeLayout的的FrameLayout,所有開始工作

相關問題