获取控件宽高
获取控件的高度值,貌似通过简单的View.getHeight就能得到,但是有些时候,如果View还没有渲染(流程onMeasure->onLayout->onDraw 这里有个注意点),getHeight()方法就获取不到你想要的值了,比如:
TextView tv = new TextView();
tv.setText("hahahahaha");
int height = tv.getHeight();
此时获取到到height就非你所愿。这里引入ViewTreeObserver 及其 OnGlobalLayoutListener
ViewTreeObserver.OnGlobalLayoutListener
Interface definition for a callback to be invoked when the global layout state or the visibility of views within the view tree changes.
修改后可用代码应如下:
tv.setText(msg);
tv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
tv.getViewTreeObserver().removeOnGlobalLayoutListener(this);
int height = tv.getHeight();
}
});
注意: tv.getViewTreeObserver().removeOnGlobalLayoutListener(this) 切记要根据场景及时remove,否则后果自负……^_^