2011-08-29 43 views
23

我是使用視圖流組件到我的項目,它允許開發覆蓋一些的屬性,如:是否可以將自定義屬性添加到android資源中的樣式中?

<org.taptwo.android.widget.TitleFlowIndicator 
    ... 
    app:footerTriangleHeight="0dip" 
    ... /> 

我重用這個組件分成幾個佈局,我想放屬性變成一種風格。 但是,當我這樣做時,解析器說Error: No resource found that matches the given name: attr 'app:footerTriangleHeight',即使我添加樣式文件中的命名空間。

有沒有辦法做到這一點在Android?

謝謝。

+0

選擇的答案是錯的/不完整的。您可以在樣式文件中自定義UI元素,自己完成此操作...查看我的答案,例如 – Kurru

回答

39

Android應用程序

如果不使用Android庫,那麼這裏就是你可以做什麼:

  1. 定義自定義設置樣式屬性(我想你已經這樣做了)。
  2. 請勿在樣式項目中使用您的命名空間前綴(命名空間默認爲當前應用程序的命名空間)。

實施例:

attrs.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="testAttr" format="string"/>   
</resources> 

styles.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources>   
    <style name="TestStyle" > 
     <item name="testAttr">asdf</item> 
    </style>   
</resources> 

Android庫

如果自定義屬性來自Android庫,則仍然可以使用所描述的方法。理論上它應該工作,因爲Android庫的名稱空間與應用程序的名稱空間相同(在構建過程中從aapt工具角度)。但我沒有自己測試過。


如果您指定命名空間,它將顯示錯誤。據我所知,樣式不支持xml命名空間。因此,這將失敗:

styles.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:app="http://schemas.android.com/apk/res/app.package.name">   
    <style name="TestStyle" > 
     <item name="app:testAttr">asdf</item> 
    </style>   
</resources> 

分析器會自動默認爲當前應用程序的AndroidManifest命名空間,雖然你不能明確指定該命名空間。

+2

您是對的,我只需要刪除樣式文件中的命名空間,並且它工作正常。但是它在正常的佈局文件中是必需的,而不是在資源文件中。謝謝。 –

+0

這適用於新的CardView小部件,例如:只刪除名稱空間,並且像 16dp這樣的樣式項目編譯並運行良好。 – personne3000

6

您可以在命名空間來定義的風格,我已經用它自己

<style name="whatever"> 
    <item name="YourPackage.YourSubPackage:parametername">@drawable_or_anything/bla</item> 
</style> 
+0

對於之前的文本:使用您的清單中定義的任何名稱空間作爲「包」 – Kurru

+1

這不適用於我。我的自定義樣式屬性是一個枚舉。 –

+0

您嘗試完全量化枚舉以及屬性? – Kurru

相關問題