ERROR: In <declare-styleable> MenuView, unable to find attribute android:preserveIconSpacing

本文介绍了解决Eclipse中V7包出现的ERROR:In&lt;declare-styleable&gt;MenuView, unable to find attribute android:preserveIconSpacing错误的方法。通过在V7包的attrs.xml文件中找到并修改或删除指定属性,可以有效解决该问题。

   eclipse  sdk从低版本切换到高版本sdk的时候   v7包会包这个错ERROR: In <declare-styleable> MenuView, unable to find attribute android:preserveIconSpacing

   问题解决:

     点击V7包找到values文件夹   打开attrs.xml      ctrl+f   查找 MenuView     将preserveIconSpacing注释掉或者删掉    clean项目

ok 完成。


Android 的资源定义中,如果在 `attrs.xml` 文件里多次声明相同的属性名,例如 `circleColor`,会导致编译错误:`Found item Attr/circleColor more than one time`。这种错误通常发生在多个 `<declare-styleable>` 中重复定义了相同名称的属性,并且这些属性具有相同的 `format` 类型。 ### 错误原因 Android 资源系统在编译时会将所有 `<attr>` 标签中的属性名注册到全局资源表中。如果多个 `<declare-styleable>` 中定义了相同名称的属性,则会引发冲突,导致编译失败。例如: ```xml <resources> <declare-styleable name="View1"> <attr name="circleColor" format="color" /> </declare-styleable> <declare-styleable name="View2"> <attr name="circleColor" format="color" /> </declare-styleable> </resources> ``` 上述代码会触发 `Found item Attr/circleColor more than one time` 的错误,因为 `circleColor` 属性在全局资源表中被重复定义了[^1]。 ### 解决方案 1. **重命名属性**:最直接的方式是为每个 `<declare-styleable>` 中的属性使用不同的名称,以避免冲突。例如: ```xml <resources> <declare-styleable name="View1"> <attr name="circleColor1" format="color" /> </declare-styleable> <declare-styleable name="View2"> <attr name="circleColor2" format="color" /> </declare-styleable> </resources> ``` 这种方式确保了每个属性名称在全局资源表中是唯一的,避免了重复定义的问题[^3]。 2. **复用已有属性**:如果多个组件确实需要共享同一个属性定义,可以在一个 `<declare-styleable>` 中定义该属性,然后在其他 `<declare-styleable>` 中引用该属性,而不是重新定义。例如: ```xml <resources> <attr name="circleColor" format="color" /> <declare-styleable name="View1"> <attr name="circleColor" /> </declare-styleable> <declare-styleable name="View2"> <attr name="circleColor" /> </declare-styleable> </resources> ``` 这样,`circleColor` 属性仅定义一次,并在多个 `<declare-styleable>` 中被引用,避免了重复定义的问题[^2]。 3. **使用命名空间限定属性**:虽然 XML 中的属性名不能重复,但可以通过命名空间来区分不同组件的属性。在布局文件中使用 `app:` 命名空间来引用属性时,可以明确指定其所属的组件,从而避免冲突。例如: ```xml <com.example.View1 app:circleColor="@color/red" /> <com.example.View2 app:circleColor="@color/blue" /> ``` 通过这种方式,即使属性名相同,系统也能根据命名空间正确解析对应的属性值。 ### 最佳实践 - **避免重复定义属性名**:在定义 `<declare-styleable>` 时,应尽量避免在不同组件中使用相同的属性名,以减少资源冲突的可能性。 - **合理组织属性定义**:可以将通用属性定义在单独的 `<declare-styleable>` 中,并在其他组件中引用,提高复用性。 - **使用命名空间管理属性**:在布局文件中使用 `app:` 命名空间引用属性,有助于区分不同组件的属性,避免命名冲突。 ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值