Android 布局之LinearLayout 子控制項weight權重的作用詳析(轉)

來源:互聯網
上載者:User

標籤:

 

關於Android開發中的LinearLayout子控制項權重android:layout_weigh參數的作用,網上關於其用法有兩種截然相反說法:

 

說法一:值越大,重要性越高,所佔用的空間越大;

說法二:值越大,重要性越低,所佔用的空間越小。

到底哪個正確?哪個錯誤?抑或還有其他解釋?請點擊查看關於weight 權重參數作用的詳分析:

 

其實這兩種情況都不太準確;

準確的解釋是,weight 許可權 是用於分配父控制項某一方向上尺寸-所有子控制項在該方向上設定尺寸和 所得值的一個參數,把這個相減得到的結果(可能為正也可能為負)按照某個子控制項weight值占所有weight值的比例分配給子控制項,子控制項在該方向上的最終實際尺寸為(控制項設定尺寸+weight許可權分配尺寸(可能為負))。

 

例如豎直方向的LinearLayout控制項F中,兩個控制項分別為:

A控制項 hight = a, weight =w_a;

B控制項 hight = b,weight=w_b;

父控制項F 實際 hight = c;

 

則控制項A和控制項B的最終實際尺寸為:

A控制項實際hight_a =a+(c-(a+b))*w_a/(w_a+w_b) ;

B控制項實際hight_b =b+(c-(a+b))*w_b/(w_a+w_b) ;

 

若:w_a= 1; w_b= 2;

則:

hight_a=a+(c-(a+b))/3;

hight_b=a+(c-(a+b))*2/3;

 

所以 當(c-(a+b))值大於0時,也就是所有子控制項高度(或寬度)之和小於父控制項高度(或寬度)時,weight許可權值越大會使得控制項尺寸在原設定尺寸基礎上增加的值越大;

所以 當(c-(a+b))值小於0時,也就是所有子控制項高度(或寬度)之和大於父控制項高度(或寬度)時,weight許可權值越大反而會使得控制項尺寸在原尺寸基礎上減去的值更大;

但控制項的實際尺寸是按上面公式計算結果得出,控制項之間並不是在所有情況下都是weight值越大控制項所佔空間越大或weight值越小控制項所佔空間越小。

那麼為什麼一般大家都這麼認為呢?其實是有兩種特殊情況:

一是:所有控制項該方向尺寸都設定為0dp,這時 公式中的a=0;b=0;最終A、B控制項的尺寸分別為:

hight_a=c*w_a/(w_a+w_b);

hight_b=c*w_b/(w_a+w_b);

這就是所謂的說法一:值越大,重要性越高,所佔用的空間越大。

二是:所有控制項該方向尺寸都設定為fillparent,這時 公式中的a=c;b=c;最終A、B控制項的尺寸分別為:

hight_a=c*(1-*w_a/(w_a+w_b));

hight_b=c*(1-*w_b/(w_a+w_b));

這就是所謂的說法二:值越大,重要性越高,所佔用的空間越小。

至此,關於LinearLayout布局中的控制項 的weight值的的作用,應該有了一個比較正確的認識了:

尺寸是通過公式計算出來的,只有在特殊情況下才會是普遍認為的:值越 空間越大或值越大佔用空間越小。

還有一個我認為是經常不被大家所注意的但也特別實用的用途就是:可以利用weight值在保證空間最小尺寸的前提下去分配父控制項多餘的尺寸(相對於所有子控制項在該方向上的尺寸之和),實現一些特定比例的效果,具體的在此不再展開,感興趣的可以根據公式計算,自己親自去嘗試一下,應該會有你意想不到的收穫。

http://blog.csdn.net/blogblj/article/details/19677575

http://zhangkun716717-126-com.iteye.com/blog/1870924

 

Android 布局之LinearLayout 子控制項weight權重的作用詳析(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.