1

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

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

谢谢山姆

4

3 回答 3

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 已经被定义为整数,所以下次它看到它的声明为浮点数时会抱怨。

于 2013-02-07T22:20:07.280 回答
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>

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

于 2013-02-07T22:15:24.267 回答
1

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

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

谢谢大家

于 2013-02-08T15:50:52.280 回答