2015-11-11 22 views
-1

你好,我有很多的類像這樣的(超過8個XML佈局)和他們得到了相同的結構,這樣在relativelayout中重複項目,如何清理此方法?

enter image description here

這裏是從我的佈局文件夾中的category_architecture.xml的例子:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relativeLayout_architecture" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dip" 
    android:background="@drawable/category_architecture_background"> 

    <ImageView 
     android:id="@+id/imageView_architecture" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_margin="5dp" 
     android:src="@mipmap/ic_architecture" /> 

    <TextView 
     android:id="@+id/textView_architecture" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_alignBottom="@+id/imageView_architecture" 
     android:layout_alignTop="@+id/imageView_architecture" 
     android:layout_toRightOf="@+id/imageView_architecture" 
     android:gravity="center" 
     android:text="@string/architecture" 
     android:textAppearance="@style/TextAppearance.AppCompat.Large" 
     android:textColor="@android:color/white" /> 

    <ImageView 
     android:id="@+id/imageView_building" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textView_architecture" 
     android:layout_toRightOf="@+id/switch_building" 
     android:src="@mipmap/ic_building" /> 

    <TextView 
     android:id="@+id/textView_building" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/imageView_building" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/imageView_architecture" 
     android:layout_marginLeft="5dp" 
     android:layout_toRightOf="@+id/imageView_building" 
     android:gravity="center_vertical|left" 
     android:text="@string/building" 
     android:textAlignment="viewStart" 
     android:textAppearance="@style/TextAppearance.AppCompat.Medium" 
     android:textColor="@android:color/white" /> 

    <android.support.v7.widget.SwitchCompat 
     android:id="@+id/switch_building" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_alignBottom="@+id/imageView_building" 
     android:layout_alignTop="@+id/imageView_building" 
     android:layout_toRightOf="@+id/imageView_architecture" /> 

    <ImageView 
     android:id="@+id/imageView_bridge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/imageView_building" 
     android:layout_toRightOf="@+id/switch_building" 
     android:src="@mipmap/ic_bridge" /> 

    <TextView 
     android:id="@+id/textView_bridge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/imageView_bridge" 
     android:layout_alignParentRight="true" 
     android:layout_alignLeft="@+id/textView_building" 
     android:layout_below="@+id/textView_building" 
     android:gravity="center_vertical|left" 
     android:text="@string/bridge" 
     android:textAlignment="viewStart" 
     android:textAppearance="@style/TextAppearance.AppCompat.Medium" 
     android:textColor="@android:color/white" /> 

    <android.support.v7.widget.SwitchCompat 
     android:id="@+id/switch_bridge" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_above="@+id/imageView_monument" 
     android:layout_below="@+id/textView_building" 
     android:layout_toRightOf="@+id/imageView_architecture" /> 

    <ImageView 
     android:id="@+id/imageView_monument" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/imageView_bridge" 
     android:layout_toRightOf="@+id/switch_building" 
     android:src="@mipmap/ic_monument" /> 

    <TextView 
     android:id="@+id/textView_monument" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/imageView_airport" 
     android:layout_alignParentRight="true" 
     android:layout_alignLeft="@+id/textView_building" 
     android:layout_below="@+id/textView_bridge" 
     android:gravity="center_vertical|left" 
     android:text="@string/Monument" 
     android:textAlignment="viewStart" 
     android:textAppearance="@style/TextAppearance.AppCompat.Medium" 
     android:textColor="@android:color/white" /> 

    <android.support.v7.widget.SwitchCompat 
     android:id="@+id/switch_monument" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_alignBottom="@+id/imageView_monument" 
     android:layout_below="@+id/imageView_bridge" 
     android:layout_toRightOf="@+id/imageView_architecture" /> 

    <android.support.v7.widget.SwitchCompat 
     android:id="@+id/switch_airport" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/imageView_airport" 
     android:layout_below="@+id/switch_monument" 
     android:layout_toRightOf="@+id/imageView_architecture" /> 

    <ImageView 
     android:id="@+id/imageView_airport" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/imageView_monument" 
     android:layout_toRightOf="@+id/switch_building" 
     android:src="@mipmap/ic_airport" /> 

    <TextView 
     android:id="@+id/textView_airport" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/imageView_airport" 
     android:layout_alignParentRight="true" 
     android:layout_alignLeft="@+id/textView_building" 
     android:layout_below="@+id/textView_monument" 
     android:gravity="center_vertical|left" 
     android:text="@string/airport" 
     android:textAlignment="viewStart" 
     android:textAppearance="@style/TextAppearance.AppCompat.Medium" 
     android:textColor="@android:color/white" /> 

    <android.support.v7.widget.SwitchCompat 
     android:id="@+id/switch_park_attraction" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_alignBottom="@+id/imageView_park_attraction" 
     android:layout_below="@+id/switch_airport" 
     android:layout_toRightOf="@+id/imageView_architecture" /> 

    <ImageView 
     android:id="@+id/imageView_park_attraction" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/imageView_airport" 
     android:layout_toRightOf="@+id/switch_building" 
     android:src="@mipmap/ic_amusement" /> 

    <TextView 
     android:id="@+id/textView_park_attraction" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/imageView_park_attraction" 
     android:layout_alignParentRight="true" 
     android:layout_alignLeft="@+id/textView_building" 
     android:layout_alignTop="@+id/imageView_park_attraction" 
     android:gravity="center_vertical|left" 
     android:text="@string/amusment" 
     android:textAlignment="viewStart" 
     android:textAppearance="@style/TextAppearance.AppCompat.Medium" 
     android:textColor="@android:color/white" /> 

    <android.support.v7.widget.SwitchCompat 
     android:id="@+id/switch_infrastructure" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_alignBottom="@+id/imageView_infrastructure" 
     android:layout_below="@+id/switch_park_attraction" 
     android:layout_toRightOf="@+id/imageView_architecture" /> 

    <ImageView 
     android:id="@+id/imageView_infrastructure" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/imageView_park_attraction" 
     android:layout_toRightOf="@+id/switch_building" 
     android:src="@mipmap/ic_infrastructure" /> 

    <TextView 
     android:id="@+id/textView_infrastructure" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/imageView_infrastructure" 
     android:layout_alignParentRight="true" 
     android:layout_alignLeft="@+id/textView_building" 
     android:layout_below="@+id/textView_park_attraction" 
     android:gravity="center_vertical|left" 
     android:text="@string/infrastructure" 
     android:textAlignment="viewStart" 
     android:textAppearance="@style/TextAppearance.AppCompat.Medium" 
     android:textColor="@android:color/white" /> 
</RelativeLayout> 

,所以我有一些相對於該佈局的實現問題:

  1. 那是一個不錯的選擇爲p把這個變成一個相對的佈局?
  2. 有沒有辦法減少代碼冗餘?
  3. 我可以用一些listView嗎?
  4. 與LinearLayout相比,有什麼更好用?
  5. 你應該怎麼做這種事情?

佈局的實現是好的,所有的工作(開關聽衆,承受力改變對搜索查看時觸發線,appbar圖標按類別和搜索查看和appbar也顏色切換...

但我認爲有很多技巧可以避免得到如此多的重複代碼......做所有類別佈局的工作非常多,而且我希望確定在改變我的主要方法之前我在做什麼......(我不想要花幾個小時在沒有任何正確的結果周圍跳動...)

PS:我很抱歉在這裏乞討,但我想收集一些外部建議,以便噸o改善我的代碼,併爲我的未來工作學習,謝謝;)

+1

瞭解更多關於[包括與合併(http://developer.android.com/training/improving-layouts/reusing-layouts.html) 。這就是說,如果你不想在列表中使用它們,但使用列表也可以起作用。 – torque203

回答

1

您絕對應該使用RecyclerView(或ListView)。
嘗試使用不同的單元格佈局查看您的佈局:「自然標題」,「自然單元格」,「地理標題」...然後,使用正常的RecyclerView機制,它應該是直截了當的。

這說明例子可以幫助你:

https://guides.codepath.com/android/Heterogenous-Layouts-inside-RecyclerView

+0

我已經嘗試與recyclerview,但我迷路了,我使用recyclerview來存儲我的搜索結果並顯示它們,但我不知道如何處理像這樣定義的項目:( – Noj

+1

繼續這樣,開始你的搜索然後你需要爲你的單元格類型,多個持有者創建幾個佈局,然後根據你的位置使用你的數據類型選擇正確的佈局和權利持有者。 – Jfreu

+0

好的,生病了試試吧^^感謝所有:) – Noj