声明具有相同名称但不同类型的属性

时间:2013-02-07 21:43:42

标签: android eclipse android-custom-view custom-view

我正在尝试为不同的类声明属性,其中一些属性具有相同的名称,但在不同的类上具有不同的类型。这是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="net.firouz.mastergardner.IntEditView">
        <attr name="caption" format="string" />
        <attr name="min_val" format="integer" />
        <attr name="max_val" format="integer" />
    </declare-styleable>
    <declare-styleable name="net.firouz.mastergardner.FloatEditView">
        <attr name="min_val" format="float" />
        <attr name="max_val" format="float" />
    </declare-styleable>    
</resources>

但是eclipse抱怨已经定义了属性max_valmin_val。我该如何解决这个问题。

谢谢 萨姆

3 个答案:

答案 0 :(得分:3)

您可以选择以下任何一种解决方案

<?xml version="1.0" encoding="utf-8"?>
<attr name="min_val" format="float" />
<attr name="max_val" format="float" />
<resources>
    <declare-styleable name="net.firouz.mastergardner.IntEditView">
        <attr name="caption" format="string" />
        <attr name="min_val" />
        <attr name="max_val" />
    </declare-styleable>
    <declare-styleable name="net.firouz.mastergardner.FloatEditView">
        <attr name="min_val" />
        <attr name="max_val" />
    </declare-styleable>    
</resources>

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="net.firouz.mastergardner.IntEditView">
        <attr name="caption" format="string" />
        <attr name="min_val_i" format="integer" />
        <attr name="max_val_i" format="integer" />
    </declare-styleable>
    <declare-styleable name="net.firouz.mastergardner.FloatEditView">
        <attr name="min_val_f" format="float" />
        <attr name="max_val_f" format="float" />
    </declare-styleable>    
</resources>

android只为所有属性“R.attr”生成了一个类,并且min_val和max_val已被定义为整数eclipse,下次它将其声明视为float时抱怨。

答案 1 :(得分:1)

直接将您的属性添加为节点的子节点:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="min_val" format="float" />
    <attr name="max_val" format="float" />

    <declare-styleable name="net.firouz.mastergardner.IntEditView">
       <attr name="caption" format="string" />
       <attr name="min_val" />
       <attr name="max_val"/>
   </declare-styleable>

   <declare-styleable name="net.firouz.mastergardner.FloatEditView">
      <attr name="min_val" />
      <attr name="max_val"/>
   </declare-styleable>
</resources>

否则,您必须为float和integer属性使用不同的属性名称

答案 2 :(得分:1)

我在this张贴的帮助下找到了更好的答案。 显然,属性可以有多种格式,这使得以下代码有效并且可以为我工作。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="min_val" format="float|integer|reference" />
    <attr name="max_val" format="float|integer|reference" />
    <declare-styleable name="IntEditView">
        <attr name="Caption" format="string|reference" />
        <attr name="min_val" />
        <attr name="max_val" />
    </declare-styleable>
    <declare-styleable name="FloatEditView">
        <attr name="min_val" />
        <attr name="max_val" />
    </declare-styleable>    
</resources>

谢谢大家

相关问题