1. 背景
函數
給最外層layout設置固定寬高,而後使用inflate(layoutId, null )方式加載,則layoutId的最外層的控件的寬高是沒有效果的。3d
2. 緣由分析xml
(1)緣由概述blog
layout_width,layout_height是相對父View設置的,在沒有指定父view的狀況下inflate,沒有生成對應的LayoutParams。im
(2)代碼分析layout
inflate對外主要有兩種函數實現:db
public View inflate(int resource, ViewGroup root);img
public View inflate(int resource, ViewGroup root, boolean attachToRoot);view
這兩個函數最終都會調用public View inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot)函數,在此函數中有如下代碼:vi
能夠看出,只有在root!=null的狀況下才會根據xml參數(attrs)建立並設置LayoutParams,此時設置的寬高高才會起效。
3. 解決方案
(1)在inflate的時候指定父view
(2)對於inflate的時候沒法指定父view的狀況,須要以後在將此view添加到父view的時候從新利用LayoutParams設置寬高。