正如Priya Singhal回答的那样,Android Studio要求在其自己的样式名称中定义通用属性名称。他们不再是根本。
但是,还有两点需要注意(这就是为什么我还要添加答案的原因):
- 通用样式不必与视图命名相同。(感谢此答案指出了这一点。)
- 您不需要与父级一起使用继承。
例
这是我在最近的项目中所做的,该项目具有两个共享相同属性的自定义视图。只要自定义视图仍然具有属性的名称并且不包含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>
对于一个大的项目,不过,这可能会导致混乱,并在一个位置上定义它们可能会更好(如建议在这里)。
myattr1
字符串输入MyView1
和整数输入时会发生什么MyView2
?