2015-04-20 28 views
0

我有一個custom View,其中我需要執行處理,要求視圖的大小設置(所以onCreate不起作用),但在顯示任何東西之前。所以我想知道是否有一個回調函數我可以重寫呢?Android - 視圖全部設置時是否有回調函數?

現在我正在使用onLayout,但它似乎被調用兩次,所以我假設它可能不適合用於此目的。我也試過在onMeasure這樣做,但它似乎getWidth()getHeight仍然returns 0在它。

Thankanks,

Robin。

回答

2

嘗試使用OnGlobalLayoutListeneronResume()

@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()); 
     } 
     }); 
    } 
} 
0

使用onSizeChanged,

@Override 
protected void onSizeChanged(int width, int height, int oldwidth, int oldheight) { 
    super.onSizeChanged(width, height, oldwidth, oldheight); 
    // your code here. 
} 
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); 
    } 
}; 
相關問題