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
但是,如果你自己定義的資源最外層控制元件的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行,給自定義資源的最外層控制元件賦值),然後我們新增的額外佈局控制元件就能正確測量自定義資源的最外層控制元件的大小了。
本文所有內容就只有這麼多了,如果大家有更好對這個問題的解決辦法,歡迎拍磚~