2013-11-28 72 views
0

好吧,我有一個列表視圖,其中有一些項目,每個項目都是自定義格式的LinearLayout,其中包含兩個RelativeLayout項目。第一個(左邊)包含節目的標題和副標題,正確的節目包含節目開始的時間,或者如果過去那個時間顯示「MISSED」。如何對齊兩個RelativeLayouts

我想要正確的佈局寬度來包裝它的內容和左側佈局寬度來填充剩餘空間,僅此而已。當它填充剩餘空間時,如果標題比我想要的更長,我希望它可以進入下一行。

現在我通過使左側佈局寬度爲靜態,但我希望它自動更改,爲此做了一個快速修復。我怎樣才能做到這一點?

這是我的XML看起來像:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/listRoot" 
    android:background="#fff"> 

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="260dp" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:id="@+id/mainInfoPan" 
     > 

     <!-- TITLE --> 
     <TextView 
      android:id="@+id/title" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:text="Space Holder" 
      android:textColor="#040404" 
      android:textStyle="bold" 
      android:typeface="sans" 
      android:textSize="18sp" 
      android:layout_marginTop="1dip" 
      android:layout_marginLeft="10dp" /> 

     <TextView 
      android:id="@+id/subtitle" 
      android:textStyle="bold" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_below="@+id/naslov" 
      android:textColor="#ff777777" 
      android:textSize="12sp" 
      android:layout_marginLeft="10dp" /> 

    </RelativeLayout> 

    <RelativeLayout 
     android:layout_height="match_parent" 
     android:layout_width="wrap_content" 
     android:layout_toRightOf="@+id/mainInfoPan" 
     android:padding="5dp"> 

     <TextView 
      android:id="@+id/date" 
      android:text="Space Holder" 
      android:layout_alignParentRight="true" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:textColor="#888" 
      android:textSize="12sp" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" /> 

    </RelativeLayout> 


</LinearLayout> 
+0

其中是您的'LinearLayout'?您正在使用'RelativeLayout'。 – Naddy

+0

哦,對,我正在搞亂和改變事情。編輯帖子,但同樣的問題依然存在。 – Squeazer

回答

1

讓我們從擺脫RelativeLayout的開始,並添加一些權重。我清理了一下你的代碼。

如果你沒有得到你想要的結果,請編輯你的問題,因爲它很不清楚。

<?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="wrap_content" 
    android:orientation="horizontal" 
    android:id="@+id/listRoot" 
    android:background="#fff"> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="5dp" 
     android:id="@+id/mainInfoPan" 
     > 

     <!-- TITLE --> 
     <TextView 
      android:id="@+id/title" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:text="Space Holder" 
      android:textColor="#040404" 
      android:textStyle="bold" 
      android:typeface="sans" 
      android:textSize="18sp" 
      android:layout_marginTop="1dip" 
      android:layout_marginLeft="10dp" /> 

     <TextView 
      android:id="@+id/subtitle" 
      android:textStyle="bold" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_below="@+id/naslov" 
      android:textColor="#ff777777" 
      android:textSize="12sp" 
      android:layout_marginLeft="10dp" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:padding="5dp"> 

     <TextView 
      android:id="@+id/date" 
      android:text="Space Holder" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:textColor="#888" 
      android:textSize="12sp" /> 

    </LinearLayout> 


</LinearLayout> 
+0

哦,工作,謝謝!一個難題,如果我正確理解體重,它會顯示視圖之間的比例。但是在這裏你只用了第一個版面的重量,而不是第二個。爲什麼? – Squeazer

+0

您可以使用重量作爲柔性容器。因此,例如:如果您在'dp'中具有特定寬度的'ImageView',則可以讓兄弟視圖展開/縮小以用權重響應該大小。權重本質上是比率的,因爲我只使用了一個權重,那麼'LinearLayout'將使用其容器內100%的空白空間。希望這會有所幫助,請給我一個檢查,如果你願意!:) –

+0

哦,我明白了,謝謝! – Squeazer

1

自動大小可以用「權重」屬性。 重量屬性除以%,其餘空間都種觀統領%

android:layout_height ="0dip" 

android:layout_weight ="0.7" => this view will get 70% of the available space 

還發生了什麼,當你使用「WRAP_CONTENT」用正確的佈局 和「FILL_PARENT」與左佈局?

+0

左側佈局填充所有空間,右側佈局不可見。此外,AndroidStudio在線性佈局上報告錯誤:'方向錯誤?沒有指定方向,默認是水平的,但這個佈局有多個孩子,其中至少有一個孩子有layout_width =「match_parent」' – Squeazer

+0

我會嘗試重量,看看會發生什麼。 – Squeazer

1

您可以使用一個單一的RelativeLayout,無子女的佈局,設置時間/錯過的TextView到

android:layout_alignParentRight="true" 
android:layout_centerVertical="true" 

在標題中使用:

android:layout_alignParentLeft="true" 
android:layout_alignParentTop="true" 
android:layout_toStartOf="@+id/date" 

和字幕:

android:layout_alignParentLeft="true" 
android:layout_below="@+id/title" 
android:layout_toStartOf="@+id/date" 

這樣你有一個fl在層次結構中只有3個視圖。您還可以使用固定寬度的日期,所以所有項目將對齊:

android:layout_width="@dimen/date_width"