我正在编写一些自定义视图,它们共享一些同名的属性。在attrs.xml
中它们各自的<declare-styleable>
部分,我想对属性使用相同的名称:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView1">
<attr name="myattr1" format="string" />
<attr name="myattr2" format="dimension" />
...
</declare-styleable>
<declare-styleable name="MyView2">
<attr name="myattr1" format="string" />
<attr name="myattr2" format="dimension" />
...
</declare-styleable>
</resources>
我收到一个错误,说myattr1
和myattr2
已经定义好了。我发现我应该在MyView2
中省略myattr1
和myattr2
的format
属性,但是如果这样做,我会在控制台中得到以下错误:
[2010-12-13 23:53:11 - MyProject] ERROR: In <declare-styleable> MyView2, unable to find attribute
有没有一种方法可以实现这一点,也许是某种命名空间(只是猜测)?
发布于 2015-10-12 17:18:27
我发布这个答案是因为上面发布的解决方案在Android Studio中对我不起作用。我需要在我的自定义视图之间共享我的自定义属性,所以我在Android Studio中尝试了上面的解决方案,但没有成功。因此,我进行了实验,并尝试了一种方法。希望它能帮助那些正在寻找同样问题的人。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- parent styleable -->
<declare-styleable name="MyView">
<attr name="myattr1" format="string" />
<attr name="myattr2" format="dimension" />
</declare-styleable>
<!-- inheriting parent styleable -->
<!-- also note "myBackgroundColor" belongs to child styleable"MyView1"-->
<declare-styleable name="MyView1" parent="MyView">
<attr name="myattr1" />
<attr name="myattr2" />
<attr name="myBackgroundColor" format="color"/>
</declare-styleable>
<!-- inheriting parent styleable -->
<!-- same way here "myfonnt" belongs to child styelable "MyView2" -->
<declare-styleable name="MyView2" parent="MyView">
<attr name="myattr1" />
<attr name="myattr2" />
<attr name="myfont" format="string"/>
...
</declare-styleable>
</resources>
这对我来说完全有效。我们需要让一个父元素成为可样式化的,然后我们需要继承这个父元素的样式。例如,正如我上面所做的:父样式名称MyView,并将其分别继承到我的其他样式名称,如MyView1和MyView2。
发布于 2017-01-05 00:05:56
感谢刘易斯,我也有同样的问题,你的继承解决方案给了我如下提示,它工作得很好。我只是在上面声明了通用属性,并在样式声明的主体中重写了它,没有格式化。我希望它能帮助一些人
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- common attributes -->
<attr name="myattr1" format="string" />
<attr name="myattr2" format="dimension" />
<!-- also note "myBackgroundColor" belongs to child styleable"MyView1"-->
<declare-styleable name="MyView1" >
<attr name="myattr1" />
<attr name="myattr2" />
<attr name="myBackgroundColor" format="color"/>
</declare-styleable>
<!-- same way here "myfonnt" belongs to child styelable "MyView2" -->
<declare-styleable name="MyView2" parent="MyView">
<attr name="myattr1" />
<attr name="myattr2" />
<attr name="myfont" format="string"/>
...
</declare-styleable>
发布于 2016-08-09 18:25:39
以防有人在尝试了可用的解决方案后仍然坚持这个问题。我坚持用string
格式添加subtitle
属性。
我的解决方案是删除格式。
之前:
<attr name="subtitle" format="string"/>
之后:
<attr name="subtitle"/>
https://stackoverflow.com/questions/4434327
复制相似问题