android 编程开发中 子view没有设置LayoutParams

子view是java代码中new出来的,子view没有设置LayoutParams,但是在上级viewGroup中getLayoutParams()会获取到什么?... 子view是java代码中new出来的,子view没有设置LayoutParams,但是在上级viewGroup中getLayoutParams()会获取到什么? 展开
 我来答
百度网友a367ef7
推荐于2018-05-17 · TA获得超过741个赞
知道小有建树答主
回答量:324
采纳率:50%
帮助的人:333万
展开全部

如果一个View没有set LayoutParams,在该View被添加到一个ViewGroup里时,ViewGroup会为该View创建一个默认的LayoutParams。所以如果题中的view已经存在于一个ViewGroup中,view.getLayoutParams()便会得到ViewGroup为其创建的默认LayoutParams。而这个默认LayoutParams会因ViewGroup而变,这就看是什么ViewGroup了。

看下源码就知道了:

1.ViewGroup.addView

public void addView(View child, int index) {
    if (child == null) {
        throw new IllegalArgumentException("Cannot add a null child view to a ViewGroup");
    }
    LayoutParams params = child.getLayoutParams();
    if (params == null) {
        params = generateDefaultLayoutParams();
        if (params == null) {
            throw new IllegalArgumentException("generateDefaultLayoutParams() cannot return null");
        }
    }
    addView(child, index, params);
}

2.FrameLayout.generateDefaultLayoutParams

protected LayoutParams generateDefaultLayoutParams() {
    return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
}

3.LinearLayout.generateDefaultLayoutParams

protected LayoutParams generateDefaultLayoutParams() {
    if (mOrientation == HORIZONTAL) {
        return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    } else if (mOrientation == VERTICAL) {
        return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    }
    return null;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式