我是新手,我有创建游戏的问题
执行流程
activity_main.xml - > MainActivity.java - > GameLoop.java - > action.xml(错误) - > CustomView.java
Custom view CustomView is not using the 2- or 3-argument View constructors; XML attributes will not work
我不明白......
答案 0 :(得分:55)
您需要覆盖CustomView中其他2个View构造函数:
public CustomView(Context context) {
super(context);
init(context);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public CustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private void init(Context context) {
//do stuff that was in your original constructor...
}
答案 1 :(得分:10)
您还需要实现这些构造函数:
//Constructor that is called when inflating a view from XML.
View(Context context, AttributeSet attrs)
//Perform inflation from XML and apply a class-specific base style.
View(Context context, AttributeSet attrs, int defStyle)
答案 2 :(得分:1)
我认为这取决于您如何创建自定义视图以及如何使用它
。
并非所有3个建造者都是必要的
如果使用属性xml文件创建视图,但不使用defstyle,则足以调用
public CustomView(Context context, AttributeSet attrs) {
this(context, attrs);
//Your code
}
如果你没有使用属性和defstlye /我看到这个例子/你很乐意只打电话
public CustomView(Context context) {
super(context);
//Your code
}
如果你想使用defstyle和属性
public CustomView(Context context, AttributeSet attrs) {
this(context, attrs);
//Yourcode
}
答案 3 :(得分:0)
如果有人与Kotlin合作,他/她可以这样做:
class KotlinView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr)
您可以在此处找到此解决方案和更多详细信息:https://antonioleiva.com/custom-views-android-kotlin/