我有custom View
,我需要执行处理,要求设置视图的大小(因此onCreate
不起作用),但在显示任何内容之前。所以我想知道是否有一个我可以覆盖的回调函数?
现在我正在使用onLayout
,但它似乎被调用了两次,所以我假设它可能不是正确的用途。我也尝试在onMeasure
中进行此操作,但似乎getWidth()
和getHeight
仍然是returns 0
。
Thkanks,
罗宾。
答案 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);
}
};