控件在添加子控件前需要测量监听时,这时候需要用到监视树--*ViewTreeObserver*。
比如,作者需要知道linearlayout添加该控件后是否超出屏幕一半
可以这么操作,给将要添加的控件view设置监听.
代码如下:
final ViewTreeObserver vto = view.getViewTreeObserver()
vto.addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int mwidth = view.getWidth()
LinearLayout.LayoutParams params01 = (LinearLayout.LayoutParams) view.getLayoutParams()
view.setLayoutParams(params01)
if (
mLinearLayout.getWidth() + mwidth <width) {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)mHorizontalScrollView.getLayoutParams()
params.width = mHorizontalScrollView.getWidth() + mwidth
} else {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mLinearLayout.getLayoutParams()
params.width = width
}
//注意要移除 view.getViewTreeObserver().removeOnGlobalLayoutListener(this)
}
})