2010-07-01 85 views
5

我有一个应用程序需要在一个横向方向上启用滚动条,但不是纵向方向。我认为这样做是使显示滚动条是否被启用与否,如下列属性的最简单的方法:在Android中引用XML中的枚举样式属性

<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”视为字符串而不是枚举值。我没有使用“none”,而是尝试了诸如“android:attr/scrollbars/none”,“?android:attr/none”等等,但这些都不起作用。

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

回答

11

我相信你有你的attr定义设置不当:

这是从Android源生成的attr枚举:

<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标签本身。

+0

这是完全正确的,感谢Qberticus – emmby 2010-07-01 21:07:19

+2

为了澄清,我改变了我的attrs.xml到' <申报,设置样式名称= “主题”> <枚举名=“无“值=” 0" ×00000000 /> <枚举名称= “垂直” 值= “0x00000200”/> '(复制从$ ANDROID_SDK /平台/机器人枚举值 - */data/res/values/attrs.xml),一切都很好。 – emmby 2010-07-01 21:09:33

+0

@emmby非常感谢您的问题和以上评论。但我更喜欢十六进制值的整数值:-) - 再次感谢! – 2012-05-31 07:57:58