我给listview添加了 HeaderView,HeaderView填充的布局里面包含了一个TextView,起名为tv_image,我想获取tv_image的宽高,试了三种办法,前两种都不成功而最后一个成功这是为什么呢?
第一种办法,通过视图树监听 onLayout方法不成功
mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mWidth = tv_image.getHeight();
mHeight = tv_image.getWidth();
tv_image.getViewTreeObserver()
.removeGlobalOnLayoutListener(this);
}
});
获取为0
2第二种办法 ,通过在屏幕获取焦点的时候获取,不成功
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
mWidth = tv_image.getHeight();
mHeight = tv_image.getHeight();
获取为0
3第三种办法,最简单测量一下成功了
mHeaderView.measure(0, 0);
mWidth = tv_image.getMeasuredHeight();
mHeight = tv_image.getMeasuredHeight();
按理说这三种方法应该都能拿到,为什么前两个拿不到呢?
主要是View的绘制流程问题,所以在onCreate方法中获取返回为0
可以用上面的http://www.2cto.com/kf/201410/341592.html第三种方法,获取不到的原因也有赘述