declare-styleable attr 重命導緻的報錯:
Attribute *** has already been defined
1:項目中出現 Attribute *** has already been defined
同一個attr.xml 檔案定義了下面的屬性
<declare-styleable name="Sample">
<attr name="custom" format="string|reference" />
</declare-styleable>
<declare-styleable name="Sample1">
<attr name="custom" format="string|reference" />
</declare-styleable>
如上聲明了兩個styleable,同時包含了相同的屬性custom,這時在編譯時會提示Attribute “xxx” has already been defined,表示相同屬性重複定義,相同styleable name不能再同一個attr.xml 檔案中重複定義,styleable name不一緻attir也不能重複定義,attr format屬性不影響重複定義結果。是以可以采用如下方法解決該問題:
a:重命名相同屬性名,将其中一個改為不同的名字,如改成custom1
<attr name="custom1" />
b:提取重複定義attr,作為公共屬性,方式如下:
<attr name="custom" format="string|reference" />
<declare-styleable name="Sample">
<attr name="custom" />
</declare-styleable>
<declare-styleable name="Sample1">
<attr name="custom" />
</declare-styleable>
c:放在2個不同attr.xml檔案中也可以解決,如定一個attrs.xml 檔案(與前一個檔案名不同就行),注:attrs.xml 可以放同一個項目中,也可以放不同的項目中(作為庫工程),不影響結果。