2013-02-09 56 views
4

我試圖用一個應該完全相同的自定義複合視圖替換一組視圖。具體來說,我經常重複以下佈局:如何在合併的自定義android視圖上維護佈局屬性?

<LinearLayout style="@style/customLayoutStyle"> 
    <Button style="@style/customButtonStyle" /> 
    <TextView style="@style/customTextViewStyle" /> 
</LinearLayout> 

我的目標是通過一個單一的<Highlighter />替換此塊。

爲此我在res定義/設計/ highlighter.xml像

<merge xmlns:android="http://schemas.android.com/apk/res/android" 
    style="@style/customLayoutStyle"> 
    <Button android:id="@+id/btnHighlighter" style="@style/customButtonStyle" /> 
    <TextView android:id="@+id/lblHighlighter" style="@style/customTextViewStyle" />  
</merge> 

在我的自定義視圖我有類似

public class Highlighter extends LinearLayout { 
    public Highlighter(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     inflate(context, R.layout.highlighter, this); 
    } 
} 

這主要工作,但似乎有些<merge>標記的佈局參數的值將被忽略。這screenshot說明了什麼似乎是錯的。底部行上的3個圖像正確對齊,使用我試圖替換的3倍LinearLayout塊。只有左上角的圖像使用自定義視圖。我的猜測是填充和layout_weight的佈局參數丟失了。我做錯了什麼,還是我需要一個解決方法?

回答

3

你對正在丟失的參數是正確的。要解決此問題,您可以將Highlighter的樣式定義放入您定義Highlighter的佈局中。

E.g.

<yournamespace.Highlighter 
    style="@style/customLayoutStyle" 
/> 
+0

這就是我最終的結果。謝謝。 – 2013-02-10 21:53:11

+3

這對我來說不是很滿意,因爲我需要在我的自定義視圖需要的地方重複這些視圖,即使它們是我自定義視圖的內在視圖。我想沒有其他選擇,只能在我的自定義視圖構造函數中手動設置它們 – nbarraille 2015-09-15 22:11:44

相關問題