1. 程式人生 > >Android inflate方法寬高處理

Android inflate方法寬高處理

Android開發中使用inflate方法,必不可少,無論是在自定義adapter中,還是在程式碼中使用自定義View時。該方法有四個過載方法,本文著重討論使用public View inflate(int resource, ViewGroup root)方法時,對生成的View寬高進行處理,因為此方法使用引數限制較少,應用最為廣泛。

使用public View inflate(int resource, ViewGroup root)該方法生成View讓人最為頭疼的地方在於,他使資原始檔resource最外層的控制元件的layout_xxx屬性失效,具體原因,請參考:http://www.2cto.com/kf/201407/313054.html

。因此,針對於該問題最簡單也最實用的解決方案就是在你自己的資原始檔最外層再新增一個Linearlayout或者RelativeLayout,具體請參考部落格:http://blog.csdn.net/mr_orange_klj/article/details/44908155。使用如下圖所示:
這裡寫圖片描述

但是,如果你自己定義的資源最外層控制元件的height或width屬性值是match_parent(fill_parent),那麼上述方法就不能完美解決這個問題了,因為新增的額外的佈局控制元件(Linearlayout或者RelativeLayout)自身的height或width屬性值是match_parent(fill_parent),額外控制元件不能被正確測量,那麼自己定義資源的最外層控制元件屬性值就不能依賴parent相關了。此時,解決問題就需要在程式碼中處理了,原理與上述方法一致。現在的問題是寬高match_parent無法測量,但是我們可以在程式碼中獲取到螢幕的寬高,在程式碼中使用View的setLayoutParams(layoutParams);

方法,可以將寬高值手動設定給自己定義資源的最外層控制元件,那麼額外的外層控制元件就能測量自己定義資源的最外層控制元件的寬高了。具體請看圖:
1. 佈局檔案:
這裡寫圖片描述

可以看到該佈局檔案與上面佈局檔案的不同之處在與自定義資源的最外層控制元件需要使用match_parent屬性值。

2.程式碼處理:
這裡寫圖片描述

主要思路就是,獲取到螢幕寬高,主動把寬高值賦給我們自定義資源的最外層控制元件(318行,find到自定義資源的最外層控制元件;319~321行,給自定義資源的最外層控制元件賦值),然後我們新增的額外佈局控制元件就能正確測量自定義資源的最外層控制元件的大小了。

本文所有內容就只有這麼多了,如果大家有更好對這個問題的解決辦法,歡迎拍磚~