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

Android 声明具有相同名称但不同类型的属性,android,eclipse,android-custom-view,custom-view,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" /> <

我试图为不同的类声明属性。有些属性具有相同的名称,但在不同的类上具有不同的类型。这是我的密码:

<?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\u val
min\u val
。我怎样才能解决这个问题

多谢各位
Sam

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

<?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>


否则,必须为浮点属性和整数属性使用不同的属性名称

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

<?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>


否则,您必须为浮点和整数属性使用不同的属性名称

您可以使用以下两种解决方案之一

<?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>



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

您可以使用以下两种解决方案之一

<?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>



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

在发布的帮助下,我找到了一个更好的答案。 显然,属性可以有多种格式,这使得下面的代码有效,可以为我工作

<?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>


谢谢大家

通过发帖,我找到了一个更好的答案。 显然,属性可以有多种格式,这使得下面的代码有效,可以为我工作

<?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>


谢谢大家

我想我必须采用第二种方法,因为在第一种方法中,两种方法都变成了浮点数,这不是我想要的。只是出于好奇。android似乎将可设置样式的名称预先挂起到属性名称上。在我的例子中,它产生了net_firouz_mastergardner_IntEditView_min_val和net_firouz_mastergardner_IntEditView_max_val和net_firouz_mastergardner_FloatEditView_min_val和net_firouz_mastergardner_FloatEditView_max_val,它们不是一回事。这可能是一个bug吗?我想我必须使用第二种方法,因为在第一种方法中,两个都变成了float,这不是我想要的。只是出于好奇。android似乎将可设置样式的名称预先挂起到属性名称上。在我的例子中,它产生了net_firouz_mastergardner_IntEditView_min_val和net_firouz_mastergardner_IntEditView_max_val和net_firouz_mastergardner_FloatEditView_min_val和net_firouz_mastergardner_FloatEditView_max_val,它们不是一回事。这可能是一个错误吗?对于IntEditView,我需要整数;对于FloatEditView,我需要浮点。对于IntEditView,我需要整数;对于FloatEditView,我需要浮点。使用您的方法,两者都将得到float。