(全面披露:这个问题是一个分支的
Creating custom view)
您可以创建超越继承自View的三个标准的构造函数,添加您想要的属性…
MyComponent(Context context, String foo)
{
super(context);
// Do something with foo
}
…但我不推荐它。最好遵循与其他组件相同的约定。这将使你的组件尽可能灵活,并将阻止开发人员使用你的组件撕开他们的头发,因为你的一切与其他不一致:
1.为每个属性提供getter和setter:
public void setFoo(String new_foo) { ... }
public String getFoo() { ... }
2.在res / values / attrs.xml中定义属性,以便可以在XML中使用它们。
3.从View提供三个标准构造函数。
如果你需要从一个带有AttributeSet的构造函数中的属性中选择任何东西,你可以…
TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.MyComponent);
CharSequence foo_cs = arr.getString(R.styleable.MyComponent_foo);
if (foo_cs != null) {
// Do something with foo_cs.toString()
}
arr.recycle(); // Do this when done.
完成所有操作后,您可以通过编程方式实例化MyCompnent …
MyComponent c = new MyComponent(context);
c.setFoo("Bar");
…或通过XML:
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:blrfl="http://schemas.android.com/apk/res-auto"
...etc...
>
android:id="@+id/customid"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
blrfl:foo="bar"
blrfl:quux="bletch"
/>