Android - View设置完成后有回调函数吗?
Android - Is there a callback function when a View is all set?
我有一个 custom View
,我需要在其中执行需要设置视图大小的处理(因此 onCreate
不起作用),但在显示任何内容之前。所以我想知道是否有我可以覆盖的回调函数?
现在我正在使用 onLayout
,但它似乎被调用了两次,所以我假设它可能不是正确的用途。我也尝试在 onMeasure
中这样做,但似乎 getWidth()
和 getHeight
仍然在其中 returns 0
。
感谢,
罗宾.
尝试在onResume()
中使用OnGlobalLayoutListener
@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);
}
};
我有一个 custom View
,我需要在其中执行需要设置视图大小的处理(因此 onCreate
不起作用),但在显示任何内容之前。所以我想知道是否有我可以覆盖的回调函数?
现在我正在使用 onLayout
,但它似乎被调用了两次,所以我假设它可能不是正确的用途。我也尝试在 onMeasure
中这样做,但似乎 getWidth()
和 getHeight
仍然在其中 returns 0
。
感谢,
罗宾.
尝试在onResume()
OnGlobalLayoutListener
@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);
}
};