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

emm*_*mby 6 android

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

<ScrollView
        a:layout_width="fill_parent"
        a:layout_height="fill_parent"
        a:scrollbars="?my_activity_scrollbars"
        a:fadingEdge="none"
        >
Run Code Online (Sandbox Code Playgroud)

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

所以我在attrs.xml中定义了这个属性:

<resources>
  <declare-styleable name="Theme">
    <attr name="my_activity_scrollbars" format="enum" /> 
  </declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud)

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

<style name="MyApp" parent="@android:style/Theme.Light">
    <item name="add_credit_card_scrollbars">none</item> 
</style>
Run Code Online (Sandbox Code Playgroud)

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

styles.xml:8: error: Error: String types not allowed (at 'my_activity_scrollbars' with value 'none').
Run Code Online (Sandbox Code Playgroud)

很明显,它将"none"视为字符串而不是枚举值.而不是使用"无"我尝试了"?android:attr/scrollbars/none","?android:attr/none"等等,但那些没有用.

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

Ric*_*ler 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>
Run Code Online (Sandbox Code Playgroud)

看来你没有定义format="enum",而是在attr标签本身中指定枚举值.

  • 为了澄清,我将attrs.xml更改为`<resources> <declare-styleable name ="Theme"> <attr name ="add_credit_card_scrollbars"> <enum name ="none"value ="0x00000000"/> <enum name = "vertical"value ="0x00000200"/> </ attr> </ declare-styleable> </ resources>`(从$ ANDROID_SDK/platforms/android - */data/res/values/attrs.xml复制枚举值)一切都很好. (2认同)