Android自定义视图上下文为空..怎么可能?

时间:2014-11-16 16:29:00

标签: android view android-custom-view android-context

我正在开发一个非常简单的自定义视图,我的视图只是扩展视图,并且有一个绘制方法

public class MyView extends View ;



public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
    System.out.println("CONTEXT!!! "+context);
}

@Override
public void draw (Canvas canvas){
...
}

XML定义是:

<com.mycode.MyView
     android:id="@+id/overlay"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
 />

Android正确尝试实例化该类,并按预期调用绘制...不幸的是,在draw方法中,上下文为null。所以我在构造函数中放置了system.out.println,以便在实例化时看到上下文不为null ...但该行永远不会被命中...那么是怎么回事?我是否在某个生命周期中,我不明白Android在完成创建上下文之前可以调用draw?在这种情况下,如何使Context成为空的东西呢?

我不明白如何将视图实例化/膨胀到调用draw方法的点,但没有上下文。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

View有4个构造函数(从API 21开始)。该框架可能正在调用构造函数的View(android.content.Context, android.util.AttributeSet, int)版本,使您无法看到Log语句。

我不知道你是如何得到Context的引用,但我的赌注是你在未被调用的构造函数中设置类似this.context = context的东西。请改用View.getContext()内的onDraw()