2015-12-15 105 views
5

我见过很多人想知道如何获得自定义组件的自定义属性,但这不是我的问题。我创建了一个自定义组件,我试图添加属性,但是当我在我的xml文件的顶部添加名称空间时,它只发现两个随机自定义属性“paddingEnd”和“paddingStart”。Android自定义属性不显示

<resources> 
    <declare-styleable name="menu_item_attrs"> 
     <attr name="imageId" format="integer" /> 
     <attr name="menuText" format="string" /> 
    </declare-styleable> 
</resources> 

这是attrs.xml文件。

public MenuListItem(Context context, AttributeSet set) { 
    super(context, set); 

    TypedArray a = context.obtainStyledAttributes(set, R.styleable.menu_item_attrs); 
    if (a == null) { 
     return; 
    } 
    CharSequence s = a.getString(R.styleable.menu_item_attrs_menuText); 
    if (s != null) { 
     // do something 
    } 
} 

这是我的自定义类的构造函数。

 <LinearLayout 
      xmlns:custom="http://schemas.android.com/apk/res-auto" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:id="@+id/expanding_layout" 
      android:background="#029eed"> 

      <aaron.testappanim.MenuListItem 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content"/> 
     </LinearLayout> 

这是我使用的组件。我想将值添加到“imageId”和“menuText”,但它们不可用。唯一显示的内容是填充相关,如下所示。

enter image description here

任何想法的家伙?

回答

12

找到解决方案。

碰巧你需要将风格化的名称与你的类名称相同。

<resources> 
    <declare-styleable name="MenuListItem"> 
     <attr name="my_custom_attribute" format="integer" /> 
    </declare-styleable> 
</resources> 

在这种情况下很多很多帖子都是错误的,因为我可以看到很多样式名称完全不同。

希望这可以阻止别人陷入这个陷阱。

干杯

+0

帮我在网上淘的答案,这个简单的问题后,极大地。谢谢! – chaser

-1

我的解决办法: 在attr.xml文件,你可能已经宣告您的自定义属性如下

<declare-styleable name="IDEditText"> <attr name="customFont" format="string"/> </declare-styleable>

这里,declare-styleable name字段必须是名自定义视图。然后它会显示在建议中。

在mycase我的自定义视图名称为IDEditText,因此declare-styleable NAME =“IDEditText”

+1

这是正确的..但它已经被回答!不管怎么说,还是要谢谢你! – Murphybro2

+0

欢迎您。我只是有这个问题,所以认为它可能会帮助别人 – Vishnu