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行,給自定義資源的最外層控件賦值),然後我們添加的額外佈局控件就能正確測量自定義資源的最外層控件的大小了。