我有一個custom View
,其中我需要執行處理,要求視圖的大小設置(所以onCreate
不起作用),但在顯示任何東西之前。所以我想知道是否有一個回調函數我可以重寫呢?Android - 視圖全部設置時是否有回調函數?
現在我正在使用onLayout
,但它似乎被調用兩次,所以我假設它可能不適合用於此目的。我也試過在onMeasure
這樣做,但它似乎getWidth()
和getHeight
仍然returns 0
在它。
Thankanks,
Robin。
我有一個custom View
,其中我需要執行處理,要求視圖的大小設置(所以onCreate
不起作用),但在顯示任何東西之前。所以我想知道是否有一個回調函數我可以重寫呢?Android - 視圖全部設置時是否有回調函數?
現在我正在使用onLayout
,但它似乎被調用兩次,所以我假設它可能不適合用於此目的。我也試過在onMeasure
這樣做,但它似乎getWidth()
和getHeight
仍然returns 0
在它。
Thankanks,
Robin。
嘗試使用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());
}
});
}
}
您可以使用回調OnSizeChanged。
使用onSizeChanged,
@Override
protected void onSizeChanged(int width, int height, int oldwidth, int oldheight) {
super.onSizeChanged(width, height, oldwidth, oldheight);
// your code here.
}
嘗試這些方法
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);
}
};