我们再oncreate()方法中获取控件的位置,宽高等属性,取到的值为0,因为控件执行到onMeasure()方法,才能计算这些值,而onCreate()方法在onMeasure()方法之前执行。
可以通过 ViewTreeObserver这个类来监听控件的变化。
void addOnDrawListener(ViewTreeObserver.OnDrawListener listener)
Register a callback to be invoked when the view tree is about to be drawn.
void addOnGlobalFocusChangeListener(ViewTreeObserver.OnGlobalFocusChangeListener listener)
Register a callback to be invoked when the focus state within the view tree changes.
void addOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener listener)
Register a callback to be invoked when the global layout state or the visibility of views within the view tree changes
void addOnPreDrawListener(ViewTreeObserver.OnPreDrawListener listener)
Register a callback to be invoked when the view tree is about to be drawn
void addOnScrollChangedListener(ViewTreeObserver.OnScrollChangedListener listener)
Register a callback to be invoked when a view has been scrolled.
void addOnTouchModeChangeListener(ViewTreeObserver.OnTouchModeChangeListener listener)
Register a callback to be invoked when the invoked when the touch mode changes.
void addOnWindowAttachListener(ViewTreeObserver.OnWindowAttachListener listener)
Register a callback to be invoked when the view hierarchy is attached to a window.
void addOnWindowFocusChangeListener(ViewTreeObserver.OnWindowFocusChangeListener listener)
</pre><p></p><p>代码示范:</p><p><pre name="code" class="java">tname.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (flag) {
flag = false;
int[] point = new int[2];
// int imageViewWidth = proposal_img.getWidth();
proposal_textView.getLocationInWindow(point);
}
}
});