android 编程开发中 子view没有设置LayoutParams
答案:1 悬赏:30
解决时间 2021-01-28 01:56
- 提问者网友:战皆罪
- 2021-01-27 02:10
android 编程开发中 子view没有设置LayoutParams
最佳答案
- 二级知识专家网友:执傲
- 2021-01-27 02:54
如果一个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;
}
看下源码就知道了:
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;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯