.java不使用2或3参数的View构造函数; XML属性不起作用

时间:2012-12-10 08:31:44

标签: android eclipse

我是新手,我有创建游戏的问题

执行流程

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

我不明白......

4 个答案:

答案 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/