android:使用addOnGlobalLayoutListener获取扩展视图的维度但是失败

时间:2013-02-24 16:07:10

标签: android view oncreate dimension

我正在实现以下addOnGlobalLayoutListener,以便在主要活动(A)的OnCreate部分中测量扩展视图(doodleView)。

  doodleView = (DoodleView) findViewById(R.id.doodleView);
  doodleView.setOnTouchListener(this);    

  doodleView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() 
  {
        @Override
        public void onGlobalLayout() 
        {
            doodleViewWidth = doodleView.getWidth(); 
            doodleViewHeight = doodleView.getHeight();
        }
  });

但是,它使用以下错误语句以addOnGlobalLayoutListener为红色下划线:

The method addOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener) in the type ViewTreeObserver is not applicable for the arguments (new OnGlobalLayoutListener(){})

我研究过网络但找不到错误的原因。会有人知道这个问题吗?非常感谢提前!

2 个答案:

答案 0 :(得分:1)

我做的事非常相似,但后来我发现了onMeasure。因此,如果这基本上是一次性尝试做类似的事情:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    View view = cardSlots[1];
    int cardHeight = view.getMeasuredHeight();
    int cardWidth = view.getMeasuredWidth();
    resizeView(playedSlot, cardWidth, cardHeight);
}

static public void resizeView(View view, int cardWidth, int cardHeight) {
    view.getLayoutParams().height = cardHeight;
    view.getLayoutParams().width = cardWidth;
    view.invalidate();
    //view.requestLayout();
    ((View)view.getParent()).invalidate();
}

这样你就不用担心这样做了:

getViewTreeObserver().removeOnGlobalLayoutListener(this);

你可能已经忘记了。

答案 1 :(得分:0)

我遇到了同样的问题。我修改了函数

doodleView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() 
  {
        @Override
        public void onGlobalLayout() 
        {
            doodleViewWidth = doodleView.getWidth(); 
            doodleViewHeight = doodleView.getHeight();
        }
  });

我所做的只是在ViewTreeObserver之前添加OnGlobalLayoutListener()班级名称。