正如 Priya Singhal 回答的那样,Android Studio 要求在其自己的样式名称中定义通用属性名称。他们不能再是根了。
但是,还有其他一些事情需要注意(这就是为什么我还要添加一个答案):
例子
这是我在最近的一个项目中所做的,该项目有两个共享相同属性的自定义视图。只要自定义视图仍然具有属性名称并且不包含 a format
,我仍然可以从代码中正常访问它们。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- common attributes to all custom text based views -->
<declare-styleable name="TextAttributes">
<attr name="text" format="string"/>
<attr name="textSize" format="dimension"/>
<attr name="textColor" format="color"/>
<attr name="gravity">
<flag name="top" value="48" />
<flag name="center" value="17" />
<flag name="bottom" value="80" />
</attr>
</declare-styleable>
<!-- custom text views -->
<declare-styleable name="View1">
<attr name="text"/>
<attr name="textSize"/>
<attr name="textColor"/>
<attr name="gravity"/>
</declare-styleable>
<declare-styleable name="View2">
<attr name="text"/>
<attr name="textSize"/>
<attr name="textColor"/>
<attr name="gravity"/>
</declare-styleable>
</resources>
简化示例
事实上,我什至不需要将属性放在自定义名称下。只要我format
为至少一个自定义视图定义它们(给它们一个 ),我就可以在任何地方使用它们(没有format
)。所以这也有效(看起来更干净):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="View1">
<attr name="text" format="string"/>
<attr name="textSize" format="dimension"/>
<attr name="textColor" format="color"/>
<attr name="gravity">
<flag name="top" value="48" />
<flag name="center" value="17" />
<flag name="bottom" value="80" />
</attr>
</declare-styleable>
<declare-styleable name="View2">
<attr name="text"/>
<attr name="textSize"/>
<attr name="textColor"/>
<attr name="gravity"/>
</declare-styleable>
</resources>
但是,对于大型项目,这可能会变得混乱,并且在单个位置的顶部定义它们可能会更好(如此处推荐)。