我想创建一个自定义视图,如电源开关(在ON和OFF之间切换的开关)。当我开始实现它时,我遇到了View
类的3个构造函数:
public CusatomView(Context context) {
super(context);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
现在我的问题是:我应该完成哪一个构造函数来检索我自己的XML属性(例如:textOn
和textOff
)?
每个人的角色是什么?
答案 0 :(得分:2)
理想情况下,你应该在一个单独的方法中执行你的东西并从所有三个构造函数中调用它,因为你永远不知道将调用哪个构造函数。以下是角色:
CusatomView(Context context)
创建一个没有初始化属性的新视图。
CustomView(Context context, AttributeSet attrs)
中设置layout_height
或layout_width
等属性时,会调用 layout.xml
将样式设置为视图时使用
CustomView(Context context, AttributeSet attrs, int defStyle)
。
答案 1 :(得分:0)
你应该创建另一个功能init
并在所有功能中调用它。
public CusatomView(Context context) {
super(context);
init();
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
可以使用任何此构造函数来实例化您的自定义视图。就像在java代码中创建视图时一样,您只需提供上下文以及何时从xml创建attrs。