2011-07-12 121 views
9

我一直在學習有關合並和修改嵌套的屬性包括:最近,我有一個問題,我似乎無法找出答案了。假設我有一個佈局定義了一個我想添加到多個佈局的頭部組件。但是,我想更改每個包含用法的每個標題的標題或圖標。例如說我有以下佈局:上包括佈局

<RelativeLayout android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       style="@style/menu_header"> 

    <Button android:id="@+id/backButton" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="@style/button" 
      android:text="@string/back"/> 

    <TextView style="@style/headerTitle" 
       android:layout_centerInParent="true" 
       android:text="${title}" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content"/> 
</RelativeLayout> 

然後我就可以使用包括在其他佈局:

<LinearLayout ...> 
    <include android:id="@+id/searchHeader" layout="@layout/shared_header" title="Search"/> 
    ... 
</LinearLayout> 

我知道我可以修改任何layout_ *根元素的屬性,但我定義其他屬性來代替佈局,比如在這個例子中說「title」,而不必創建我自己的View子類,在valaues /資源中添加declare-styleable定義等等?

有這樣的事情會使得創建可重用的意見,以便更簡單,但我似乎無法找到任何證據說,如果合併+包括可以做到這一點。

+0

我有種想,如果你想改變這些意見的內容,你應該利用由這些意見的自定義視圖。當你想在其他地方複製/粘貼一個視圖/視圖組時,包含的東西更多。 – Gregory

+0

但是,如果您只能複製和粘貼完全相同的代碼,則包含的用途有限。自定義視圖需要更多的開銷作者,添加自定義樣式選項,創建代碼的子類視圖等。如果我做的是調整嵌套元素的某些屬性,好像可以做,沒有吃整個大象 – chubbsondubs

+0

我再次閱讀了關於include的快速「教程」(http://android-developers.blogspot.com/2009/02/android-layout-tricks-2-reusing-layouts.html),看起來很清楚,它只是意思是簡單的複製/粘貼,特別是當你在2種不同的佈局(縱向和橫向)中包含一個共同的「子佈局」時。儘管我確實發現你的想法非常酷:/ – Gregory

回答

5

答案是不。不幸的是,Android並沒有那麼強大。您必須創建您自己的ViewGroup擴展並編寫更多代碼。

+0

你能提供一個如何做到這一點的例子嗎? – jpotts18

+0

不,因爲編寫您自己的自定義組件需要比評論中允許的更多的努力和空間。你不能單獨使用佈局文件來描述。如果你想構建一些可以重用和參數化的東西,你必須通過擴展ViewGroup來編寫自己的客戶組件。 – chubbsondubs

+0

我會盡力而爲。謝謝! – jpotts18