1. 程式人生 > >Android Inflater addview導致載入子佈局match_parent無效

Android Inflater addview導致載入子佈局match_parent無效

案例分析

父控制元件InfobarLayout:

這裡寫圖片描述

子控制元件InfobarView:

這裡寫圖片描述

載入InfobarView:

這裡寫圖片描述

實際效果:

這裡寫圖片描述

有麼有發現,並沒有達到預期的width為match_parent而有種wrap_content感覺。

為啥尼?帶著疑問翻開度娘。

這裡寫圖片描述
這裡寫圖片描述

程式碼邏輯走到3720行:

LayoutParams params = child.getLayoutParams();

params是空的。

走到邏輯3722行:

params = generateDefaultLayoutParams();
protected
LayoutParams generateDefaultLayoutParams() { return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); }

造成子控制元件顯示效果為wrap_content效果。

又度娘了下Inflater

回到載入InfobarView:

這裡寫圖片描述

View view = inflater.inflate(R.layout.cable_infobarview, null);

Android studio有個不友好的提示:

Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout'
s root element)

結合Inflater解析,修改程式碼為:

這裡寫圖片描述

實際執行效果為:

這裡寫圖片描述