通常,自定义属性的示例具有以下形式:
<declare-stylable name="MyView">
<attr name="name" format="string"/>
</declare-styleable>
及其用法:
<com.example.test.MyView
customns:name="Hello"/>
因此自定义视图与可设置属性的名称相同。
但你看到in this example (click for full code):
<declare-styleable name="Options">
<attr name="titleText" format="string" localization="suggested" />
<attr name="valueColor" format="color" />
</declare-styleable>
用于:
<com.vogella.android.view.compoundview.ColorOptionsView
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
custom:titleText="Background color"
custom:valueColor="@android:color/holo_green_light"
/>
这让我很奇怪,ColorOptionsView
是如何与名称为Options
定义的属性相关联的?
答案 0 :(得分:1)
这些选项作为声明的namespace
自定义的一部分提供,它位于XML
文件的顶部:
xmlns:custom="http://schemas.android.com/apk/res/com.vogella.android.view.compoundview"
注意强>
简单地添加此行不会为自动完成提供支持。如果这是您的问题的意思,则需要将架构添加到工作区的 XML目录。您可以在Eclipse中执行此操作,转到Eclipse -> Preferences
,然后转到XML -> XML Catalog
。在这里,单击Add...
按钮。导航到XML Schema文件,然后选择OK
。如果您关闭并重新打开XML文件,您现在将拥有自动完成功能。
最后,在解压缩ColorOptionsView.java
中使用的属性时,作者可以专门从该命名空间中查找属性。这来自同一个来源(由我评论):
//grab the declared-styleable resource entries
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Options, 0, 0);
//get the "titleText" entry from this element's attributes
String titleText = a.getString(R.styleable.Options_titleText);
//get the "valueColor" attribute. If it does not exists, set the default to holo_blue_light
int valueColor = a.getColor(R.styleable.Options_valueColor,
android.R.color.holo_blue_light);
a.recycle();