Android - View全部设置后是否有回调功能?

时间:2015-04-20 14:49:12

标签: android view callback

我有custom View,我需要执行处理,要求设置视图的大小(因此onCreate不起作用),但在显示任何内容之前。所以我想知道是否有一个我可以覆盖的回调函数?

现在我正在使用onLayout,但它似乎被调用了两次,所以我假设它可能不是正确的用途。我也尝试在onMeasure中进行此操作,但似乎getWidth()getHeight仍然是returns 0

Thkanks,

罗宾。

4 个答案:

答案 0 :(得分:2)

尝试在OnGlobalLayoutListener

中使用onResume()
@Override
public void onResume(){
    super.onResume();

    ViewTreeObserver viewTreeObserver = yourView.getViewTreeObserver();
    if (viewTreeObserver.isAlive()) {
      viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            viewWidth = yourView.getWidth();
          viewHeight = yourView.getHeight();
            yourView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
          System.out.println(viewHeight + " on resume x" + yourView.getX()); 
        }
      });
    }  
}

答案 1 :(得分:0)

您可以使用回调OnSizeChanged

答案 2 :(得分:0)

使用onSizeChanged,

@Override
protected void onSizeChanged(int width, int height, int oldwidth, int oldheight) {
    super.onSizeChanged(width, height, oldwidth, oldheight);
    // your code here.
}

答案 3 :(得分:0)

尝试这些方法

 1.
ViewTreeObserver vto2 = imageView.getViewTreeObserver();
vto2.addOnGlobalLayoutListener(new

OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout () {
        imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        int height = imageView.getHeight();
        int width = imageView.getWidth();
        textView.append("\n\n" + imageView.getHeight() + "," + imageView.getWidth());
    }
}

);

2.

imageView.post(new Runnable() {
    @Override
    public void run () {
        int h = imageView.getHeight();
        int w = imageView.getWidth();
        Log.i(TAG, "Height=" + h);
    }
};