在Android中引用XML中的枚举样式属性

时间:2010-07-01 19:18:19

标签: android

我有一个应用程序需要在一个横向方向启用滚动条,但不能在纵向方向启用滚动条。我认为最简单的方法是创建一个属性,指示滚动条是否启用,如下所示:

<ScrollView
        a:layout_width="fill_parent"
        a:layout_height="fill_parent"
        a:scrollbars="?my_activity_scrollbars"
        a:fadingEdge="none"
        >

然后我会为横向和纵向模式定义属性的单独值。看似容易。

然后我在attrs.xml中定义了这个属性:

<resources>
  <declare-styleable name="Theme">
    <attr name="my_activity_scrollbars" format="enum" /> 
  </declare-styleable>
</resources>

并将其添加到我的应用程序的styles.xml:

<style name="MyApp" parent="@android:style/Theme.Light">
    <item name="add_credit_card_scrollbars">none</item> 
</style>

但是,当我尝试编译我的应用程序时,出现以下错误:

styles.xml:8: error: Error: String types not allowed (at 'my_activity_scrollbars' with value 'none').

似乎很清楚,它将“none”视为字符串而不是枚举值。而不是使用“无”我尝试过“?android:attr / scrollbars / none”,“?android:attr / none”等等,但那些没有用。

如何将“none”值指定为枚举值而不是字符串?

1 个答案:

答案 0 :(得分:11)

我相信您的attr定义设置不正确:

这是来自android源代码的attr enum:

<attr name="ellipsize">
    <enum name="none" value="0" />
    <enum name="start" value="1" />
    <enum name="middle" value="2" />
    <enum name="end" value="3" />
    <enum name="marquee" value="4" />
</attr>

您似乎没有定义format="enum",而是在attr标记本身中指定枚举值。