天天看點

Attribute *** has already been defined

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 可以放同一個項目中,也可以放不同的項目中(作為庫工程),不影響結果。