【问题标题】:Re-using Android Custom enum xml attributes重用 Android 自定义枚举 xml 属性
【发布时间】:2013-02-20 06:58:02
【问题描述】:

我在 XML 中定义了一个自定义属性,它是一个枚举。它看起来像这样:

<declare-styleable name="MyControl">
    <attr name="myProperty">
        <enum name="None" value="0"/>
        <enum name="One" value="1"/>
        <enum name="Two" value="2"/>
        <enum name="Three" value="3"/>
        <enum name="Four" value="4"/>
        <enum name="Five" value="5"/>
        <enum name="Six" value="6"/>
        <enum name="Seven" value="7"/>
        <enum name="Eight" value="8"/>
        <enum name="Nine" value="9"/>
        <enum name="Ten" value="10"/>
    </attr>
</declare-styleable>

现在假设我希望另一个不相关的类使用同一组枚举值。有没有办法做到这一点,而无需在新节点的新节点中复制枚举列表?例如,具有如下语义的东西:

 <declare-styleable name="MyUnrelatedControl">
    <attr name="myProperty" format="[myEnum Format Reference]"/>
 </declare-stylable>

【问题讨论】:

    标签: android enums custom-attributes


    【解决方案1】:

    只需定义您无法控制的属性:

    <attr name="myProperty" format="enum">
        <enum name="None" value="0"/>
        <enum name="One" value="1"/>
        <enum name="Two" value="2"/>
        <enum name="Three" value="3"/>
        <enum name="Four" value="4"/>
        <enum name="Five" value="5"/>
        <enum name="Six" value="6"/>
        <enum name="Seven" value="7"/>
        <enum name="Eight" value="8"/> 
        <enum name="Nine" value="9"/>
        <enum name="Ten" value="10"/>
    </attr>
    

    然后将其重用于所有控件:

    <declare-styleable name="MyControl">
        <attr name="myProperty"/>
    </declare-styleable>
    
    <declare-styleable name="MyUnrelatedControl">
        <attr name="myProperty"/>
    </declare-styleable>
    

    【讨论】:

    • 完美。谢谢。也许您会知道是否有一种方法可以使用具有相同枚举的同一对象中的两个不同属性来执行此操作。例如,我的类同时具有属性 _myProperty 和 _myOtherProperty,它们都可以具有相同的枚举值?
    • 这是个好问题。不幸的是,我不知道有什么方法可以做到这一点,尽管它似乎应该存在。可能值得研究 Android 源代码,了解他们如何定义 layout_widthlayout_height 或类似的东西,因为我想他们会重用 wrap_contentmatch_parent
    • 通过查看 Android 源代码,他们每次都定义它们,所以我假设可能没有办法进一步简化它。
    • 我这里有额外的要求,来自Java文件也像ellipsize那么如何使用这个我想访问java文件中的那个枚举我们可以对edittext的ellipsize做同样的事情吗???跨度>
    猜你喜欢
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 2017-04-02
    相关资源
    最近更新 更多