2011-10-15 45 views
10

我有一組類似的應用程序。我將公共資源和代碼提取到庫項目和應用程序中,只是覆蓋他們需要的內容。在我的圖書館有規定的下列方式:如何覆蓋(或隱藏)Android庫項目中定義的樣式屬性?

<style name="ListItemText"> 
    <item name="android:layout_toRightOf">@id/preview_image</item> 
    <item name="android:textStyle">bold</item> 
    <item name="android:textSize">@dimen/previewTextSize</item> 
</style> 

正如你可以看到它包含android:layout_toRightOf屬性,因爲風格將被應用到ListView行中的文本應顯示的圖像的,正確的行。
但是,在我的一個應用程序中,我想在圖像下方顯示文本。如何定義該應用程序中的ListItemText樣式以覆蓋android:layout_toRightOf屬性值並將其替換爲android:layout_below

如果我把它定義爲:

<style name="ListItemText"> 
    <item name="android:layout_below">@id/preview_image</item> 
</style> 

它顯示的文字到圖像右側和下方,有效地總結來自庫和應用程序樣式屬性個XML。

P.S:我的問題的一個可能的解決辦法是在風格擺脫android:layout_toRightOf並將其移動到佈局XML來代替。然後在目標應用程序中,可以重新定義/覆蓋此佈局。但是我正在尋找基於樣式的解決方案,因爲它可以提供更簡單直接的屬性覆蓋方式。
(我也可以使用parent屬性的繼承樣式,但這會再次要求應用程序中的佈局覆蓋,我試圖避免)。

+0

我在做類似的東西在這裏! http://stackoverflow.com/questions/17103894/overriding-referenced-style-attributes – toobsco42

回答

6

要禁用android:layout_toRightOf,你可以將其設置爲@null。如果您的應用定義ListItemText風格如下,它應該如你所願地工作:

<style name="ListItemText"> 
    <item name="android:layout_toRightOf">@null</item> 
    <item name="android:layout_below">@id/preview_image</item> 
</style> 
+0

按預期工作,謝謝。在文檔的某處是否指定了「@ null」引用? – Idolon

+1

據我所知,沒有任何明顯的位置,但提到它,就像這裏的例子:http://developer.android.com/resources/articles/window-bg-speed.html –

0

您可以使用「父」來派生出一種專門的風格(請參閱http://developer.android.com/guide/topics/ui/themes.html),但使用樣式來定義這樣的佈局並不會成爲解決此問題的方法。可以在佈局文件中保留一些佈局信息。

+0

是的,我知道「父母」。但它不會幫助我的情況,因爲佈局是在庫內定義的,並且它引用了'ListItemText'風格。我可以在課程的應用中重新定義風格(請參閱我的參考資料),但想知道基於樣式的解決方案是否可行。 – Idolon

相關問題