自定义属性错误-Android Studio 1.2

7
在我的Android项目中,我有一些使用自定义属性的自定义组件。
attrs.xml文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources >
    <declare-styleable name = "TextBox">
        <attr name = "font" format = "string"/>
    </declare-styleable>

    <declare-styleable name = "ButtonBox">
        <attr name = "font" format = "string"/>
    </declare-styleable>
</resources>

我在自定义组件中成功地调用了属性,但是当我运行代码时,却看到了以下错误。

错误:找到多个名称为Attr/font的项
错误:任务':app:mergeDebugResources'执行失败。

两个不同的declare-styleable资源中存在类似的属性名称并不会产生影响,对吗?

如果您有任何帮助,将不胜感激,谢谢!


类似于https://dev59.com/i2855IYBdhLWcg3wSSKl - Suragch
2个回答

6
如您可以在这里所看到的,属性本身可以具有多个属性,只需定义一次即可,并且您可以在其中配置多个详细信息。
因此,您应该为其赋予不同的名称,或者由于它们具有相同的属性,可以仅使用一个declare-styable
还请查看此链接,其中有一个很好的例子。
以下是正确的用法:
<?xml version="1.0" encoding="utf-8"?>
<resources >
    <declare-styleable name="Box">
        <attr name="font" format="string"/>
    </declare-styleable>
</resources>

您可以在文本、按钮等元素上使用Box

2
哦,是的,我想我可以让它们使用相同的名称,我没有考虑过声明样式除了与其关联的名称之外的任何名称。这些链接非常有帮助,谢谢。 - MikaylaRay44

1
Android - 自定义视图:多个自定义视图上相同的属性
您可能尝试过在attrs.xml中使用以下代码:

'''

<resources>
  
  <declare-styleable name="MyComponent1">
    <attr name="myAttr" format="string" />
  </declare-styleable>
  
  <declare-styleable name="MyComponent2">
    <attr name="myAttr" format="string" />
  </declare-styleable>
  
</resources>

但是这样并不起作用,我们会收到一个错误提示: 发现多次出现的项目属性 myAttr 。

本地视图如何处理这种情况? 原生视图具有相同的属性名称,不会遇到此问题。 让我们偷看一下它们的代码,并查看这些属性是如何声明的。

查看它们的代码,我们可以看到它们在 declare-styleable 之外创建 attr 标签,然后在其内部,只需要按名称引用它,无需再次声明格式。

我们的代码应该像这样:

  <resources>
  
  <attr name="myAttr" format="string" />
  
  <declare-styleable name="MyComponent1">
    <attr name="myAttr" />
  </declare-styleable>
  
  <declare-styleable name="MyComponent2">
    <attr name="myAttr" />
  </declare-styleable>
  
</resources>

您也可以阅读这篇出色的中文文章: 自定义 View 中同一属性在多个 View 上使用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接