#问题描述
在如下一段代码中,布局layoutResId中有使用LinearLayout的layout_weight属性,大概布局是一个listView,然后最底部显示一个合计行,因此在ListView中使用了layout_weight="1",layout_height="0dp",如果直接使用setContentView(layoutResId)来加载这个布局,显示没有任何问题,但是通过inflate然后addView(view)来加载,发现最底部的合计行不在最底部了,而是紧跟着ListView。
View view = this.getLayoutInflater().inflate(layoutResId, null);
layout.addView(view);
#原因分析
在左查右查上查下查,终于在addView()中发现问题,在addView(view),优先使用view的LayoutParams布局参数,若没有,则使用,AddView(view, LayoutParams)方法中传入LayoutParams,若仍然没有,则会创建一个默认的LayoutParams布局参数,而创建默认的这个LayoutParams参数的宽高都是wrap_content的,所以才导致了layout_weigth不生效的原因。
#解决方案
知道问题的原因了,解决就好办了,要么给addView()的参数view手动设置LayoutParams参数,要么在使用addView(view,LayoutParams)的这个添加方法,在添加时指定LayoutParams参数,问题就解决了。
特此记录一下,免得忘记了。若有说的不对的地方,欢迎各位大神指正。