2016-07-15 181 views
0

我想創建一個類似於在一個回收視圖cardview內的列表。如何避免嵌套的LinearLayout或RelativeLayout

這是一個應該在回收站適配器的getholderview函數中以編程方式填充的詳細框。

現在我想出了下面的代碼,但不知何故,我覺得這不是很高效。

我怎樣才能避免很多嵌套的佈局來實現這一點,我應該甚至試圖避免在這種情況下呢?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:card_view="http://schemas.android.com/apk/res-auto" 
       xmlns:app="http://schemas.android.com/tools" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"> 

    <android.support.v7.widget.CardView 

     <RelativeLayout ...> 
      ... Other content Title 
<ImageView 
      android:id="@+id/profileImage" 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:background="@drawable/ic_loyalty_black_24dp" 
      /> 

<TextView 
    android:id="@+id/cell_textView" 
    android:layout_toRightOf="@id/profileImage" 
    android:layout_toEndOf="@id/profileImage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Medium Text" 
    android:focusable="true" 
    android:clickable="true" 
    android:foreground="?android:attr/selectableItemBackground" 
    android:textAppearance="?android:attr/textAppearanceMedium"/> 

<TextView 
    android:id="@+id/fat_bar_text" 
    android:layout_toRightOf="@id/profileImage" 
    android:layout_toEndOf="@id/profileImage" 
    android:layout_below="@id/cell_textView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Fett:" 
    android:layout_marginTop="3dp" 
    android:textAppearance="?android:attr/textAppearanceSmall"/> 

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
          android:id="@+id/detailBox" 
          android:layout_width="fill_parent" 
          android:layout_height="wrap_content" 
          android:orientation="vertical" 
          android:layout_below="@id/fat_bar_text" 
          android:gravity="bottom"> 

       <LinearLayout 
        android:orientation="horizontal" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"> 

        <TextView 
         android:layout_gravity="start" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_weight="0.5" 
         android:text="Value:"/> 

        <TextView 
         android:layout_weight="0.5" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="500€"/> 
       </LinearLayout> 

       <LinearLayout 
        android:orientation="horizontal" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"> 

        <TextView 
         android:layout_gravity="start" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_weight="0.5" 
         android:text="Test:"/> 

        <TextView 
         android:layout_weight="0.5" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="blah"/> 
       </LinearLayout> 
      </LinearLayout> 
     </RelativeLayout> 


    </android.support.v7.widget.CardView> 
</LinearLayout> 

回答

2

根LinearLayout是不必要的,使用CardView作爲根元素。

如果您沒有觸摸事件或樣式,則第二個LinearLayout也是不必要的。與子元素

你可以把它包含兩個TextView的成另一個XML文件,並將它們包括與<include>標籤的最內層的LinearLayout layout_below ATTR取代它,這樣可以使你的代碼更簡單,乾淨。並且易於重複使用。這樣

mytext.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    <TextView 
     android:layout_gravity="start" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.5" 
     android:text="Value:"/> 

    <TextView 
     android:layout_weight="0.5" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="500€"/> 
</LinearLayout> 

cardview.xml

<include 
    layout="@layout/mytext" 
    android:id="@+id/mytext1" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

<include 
    layout="@layout/mytext" 
    android:id="@+id/mytext2" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 
+0

謝謝,我試圖刪除第二個但後來的意見不再定位了,請看編輯的問題。 – cinatic

+0

我不明白?你是否在第二個LinearLayout的子視圖中設置了android:below? – Harlan

+0

你的意思是android:layout_below,studio在自動完成時不會給我這個選項,我應該設置它的什麼id,cardview的id? – cinatic

2

請考慮使用Constraint Layout。它的創建旨在爲任何複雜性的建築佈局提供靈活性。它減少了嵌套佈局的數量。 One more link

+0

thx這看起來很有趣 – cinatic