使用View.inflate(LayoutInflater.inflate)获取布局文件对象,页面发现没有填充父窗体,右边有空白。
private void init() {
// public static View inflate(Context context, int resource, ViewGroup root)
showInMiddle = (LinearLayout) View.inflate(context, R.layout.il_hall,
null);
// root 不为null, View.inflate返回root
// root 为null,不会setLayoutParams,导致 showInMiddle.getLayoutParams() 返回 null,
//解决办法是手动设置一下,(但ListView比较特殊,它自己设置好了)
if (showInMiddle.getLayoutParams() == null) {
showInMiddle.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}
}
ListView中的源码:
private void measureScrapChild(View child, int position, int widthMeasureSpec) {
LayoutParams p = (LayoutParams) child.getLayoutParams();
**if (p == null) {
p = (AbsListView.LayoutParams) generateDefaultLayoutParams();
child.setLayoutParams(p);
}**
..............
}
/**
* Measure a particular list child.
* TODO: unify with setUpChild.
* @param child The child.
*/
private void measureItem(View child) {
ViewGroup.LayoutParams p = child.getLayoutParams();
**if (p == null) {
p = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
}**
..............
}