引用属性枚举值

时间:2013-01-05 21:26:10

标签: android android-xml

提供样式参数时是否可以引用 enum 值?
例如,我们可以这样做:

<!-- layouts.xml -->
<TextView
    android:text="@string/str" />

<!-- values.xml -->
<item type="string" name="str">hi</item>

这适用于字符串,整数,维度等,但我需要引用 enum 值 - 例如visibility属性。我正在寻找类似的东西:

<!-- layouts.xml -->
<TextView
    android:visibility="@????/viz" />

<!-- values.xml -->
<item type="?????" name="viz">gone</item>

visibility只是一个示例 - 它可以是任何其他基于枚举的属性。

到目前为止,我找到的唯一解决方法是使用 styles

<!-- layouts.xml -->
<TextView
    android:style="@styles/theStyle" />

<!-- styles.xml -->
<style name="theStyle">
    <item name="android:visibility">gone</item>
</style>

但这在某种程度上是限制性的,因为如果你需要将真正的样式与TextViews和特殊样式一起使用它变得越来越复杂,它只用于控制单个属性

另一种选择是,如果有方法可以引用单个样式项。类似的东西:

<TextView
    android:visibility="@styles/theStyle/visibility" />

但我认为上述情况的可能性更小。

1 个答案:

答案 0 :(得分:3)

每个枚举实际上是一组命名整数。 例如,visibility属性声明如下:

<attr name="visibility">
    <enum name="visible" value="0" />
    <enum name="invisible" value="1" />
    <enum name="gone" value="2" />
</attr>

因此,您可以直接通过其值引用枚举项。像这样:

<!-- values.xml -->
<item name="viz" type="integer">1</item>

<!-- layouts.xml -->
<TextView
    android:visibility="@integer/viz"/>

我刚刚在手机上查看了它,效果很好。