[bug修復方案分享]在不傳父view的狀況下Inflate最外層layout設置寬高失效的問題

1. 背景
函數

給最外層layout設置固定寬高,而後使用inflate(layoutId, null )方式加載,則layoutId的最外層的控件的寬高是沒有效果的。3d


1.png

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


2.png

能夠看出,只有在root!=null的狀況下才會根據xml參數(attrs)建立並設置LayoutParams,此時設置的寬高高才會起效。

3. 解決方案

(1)在inflate的時候指定父view

(2)對於inflate的時候沒法指定父view的狀況,須要以後在將此view添加到父view的時候從新利用LayoutParams設置寬高。

相關文章
相關標籤/搜索