2011-03-10 68 views
9

我正嘗試在Android中創建此簡單佈局。無法通過「fill_parent」獲得正確的佈局

enter image description here

一個應該換到適合其內容和left|center_vertical對齊。

B應該儘可能擴大,填滿所有的空白空間。

C應該是右對齊的,包裝以填充其內容並且也被對齊center_vertical

這裏是我的佈局:

<?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="horizontal" 
     android:gravity="left|center_vertical"> 
    <!-- A --> 
    <ImageView android:id="@+id/example_item_icon" 
      android:layout_width="48px" 
      android:layout_height="48px"/> 
    <!-- B --> 
    <LinearLayout android:orientation="vertical" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:gravity="left|center_vertical" 
      android:padding="5px"> 

     <TextView android:id="@+id/example_item_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textStyle="bold"/> 

     <TextView android:id="@+id/example_item_level_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textStyle="bold|italic" 
       android:lines="1" 
       android:textSize="10px"/> 
    </LinearLayout> 
    <!-- C --> 
    <TextView android:id="@+id/example_item_count_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textStyle="bold" 
      android:textSize="14px"/> 
</LinearLayout> 

在這種佈局中,Ç推離屏幕。我怎樣才能使這個佈局工作?

回答

19

fill_parent的意思是「與父母一樣大」,而不是「使用剩餘的空白空間」。而不是fill_parent,只需使用android:layout_width =「0dip」和android:layout_weight =「1」即可。

+0

哦,陷阱。我認爲'fill_parent'意思是'儘可能地擴大來填充父',不像'match_parent' ='字面匹配父'的大小。 – 2011-03-10 00:44:21

+1

match_parent是fill_parent的新名稱:) – 2011-03-10 01:31:32

+0

史詩般的勝利。 \ m/:) – 2011-03-10 01:38:37

0

試試這個。我將ImageViews替換爲TextViews,以便在XML編輯器中顯示。請注意,我保持「A」的48px寬度,這不是我認爲你真的想要的。用wrap_content替換它。

<?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="horizontal" 
     android:gravity="center_vertical"> 

    <!-- A --> 
    <TextView android:layout_height="48px" 
    android:id="@+id/example_item_count_text2" 
    android:textSize="14px" 
    android:layout_weight="1" 
    android:text="this is item a" 
    android:textStyle="bold" 
    android:layout_width="48px"> 
    </TextView> 

    <!-- B --> 
    <LinearLayout android:orientation="vertical" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:gravity="center_vertical" 
      android:layout_weight="1" 
      android:padding="5px"> 

     <TextView android:id="@+id/example_item_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="this is B" 
       android:textStyle="bold"/> 

     <TextView android:id="@+id/example_item_level_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="this should be underneath B" 
       > 
    </LinearLayout> 

    <!-- C --> 
    <TextView android:id="@+id/example_item_count_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="this is item c" 
      android:layout_weight="1" 
      android:textStyle="bold" 
      android:textSize="14px"/> 
</LinearLayout> 
2

的伎倆,使用相對佈局......這裏是一個例子(關閉我的頭頂部 - 沒有檢查和失蹤高度場和垂直對齊設置,可以很容易地看到重要的東西)。

<relativelayout android:width="fillParent"> 
    <textview android:id="@+id/left" android:text="left" 
       android:width="wrap_content" 
       android:layout_alignParentleft="true" /> 
    <textview android:id="@+id/right" android:text="right" 
       android:width="wrap_content" 
       android:layout_alignParentright="true" /> 
    <textview android:id="@+id/middle" android:text="middle" 
       android:width="wrap_content" 
       android:layout_alignleft="@id/right" android:layout_alignright="@id/left" /> 
</relativelayout> 

編輯:這裏是清潔的錯別字(並且測試作爲工作)

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
<TextView 
    android:id="@+id/left" 
    android:text="left" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" /> 
<TextView 
    android:id="@+id/right" 
    android:text="right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" /> 
<TextView 
    android:id="@+id/middle" 
    android:text="middle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@id/right" 
    android:layout_toRightOf="@id/left" /> 
</RelativeLayout> 
+0

textview middle是wrap_content,它不會擴展 – max4ever 2011-05-24 11:18:52

+0

它可以在中間textview上使用width = wrap_content。我添加了錯誤更正的版本 - 試試。 – SteelBytes 2011-05-25 02:06:46

+0

不錯!似乎使用「toLeftOf」/「toRightOf」強制「中間」展開,直到它填充「right」和「left」之間的所有空白空間,即它是LinearLayout的layout_weight的(近似)等效值。謝謝! – 2012-10-23 11:24:58

0

這裏是我的答案。我只是將layout_weight設置爲B1。顯然,layout_weight就像基於百分比的佈局方法。我不知道它是如何工作的,但這裏是我的成品,看起來不錯:

<?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="horizontal" 
     android:gravity="left|center_vertical"> 

    <ImageView android:id="@+id/example_item_icon" 
      android:layout_width="48px" 
      android:layout_height="48px"/> 

    <LinearLayout android:orientation="vertical" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:gravity="left|center_vertical" 
      android:layout_weight="1" 
      android:padding="5px"> 

     <TextView android:id="@+id/example_item_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textStyle="bold"/> 

     <TextView android:id="@+id/example_item_level_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textStyle="bold|italic" 
       android:lines="1" 
       android:textSize="10px"/> 
    </LinearLayout> 

    <TextView android:id="@+id/example_item_count_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textStyle="bold" 
      android:textSize="14px"/> 
</LinearLayout>