Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發筆記之權重(layout_weight)

android開發筆記之權重(layout_weight)

編輯:關於Android編程

我相信大家在布局文件中都用過權重(layout_weight)吧,當然這只有在線性布局(Linearlayout)中才有的,可是很多人也許都只是簡單的理解為比。

其實權重就是:
把屏幕剩余空間按比例分配

大家先記住這句話,這裡就來深入理解下權重,這裡以水平排列為例(即寬度的權重),懂了水平的,豎直排列的(即高度的權重)自然同理。

①第一種情況(寬度為wrap_content):

a.

這裡寫圖片描述

效果:

這裡寫圖片描述

 

現在兩個按鈕的寬度都為wrap_content,所以剩下的屏幕寬度為:

math_parent - 2*wrap_content,權重為1:1

則btn1所占寬度為:本身寬度 + 剩下屏幕的寬度的1/2 = wrap_content
+ 1/2(math_parent - 2*wrap_content)

btn2所占的寬度為:本身寬度 + 剩下屏幕的寬度的1/2 = wrap_content
+ 1/2(math_parent - 2*wrap_content)

從上面看到兩式相等,所以兩個按鈕應該是平分整個屏幕寬度

b.

效果:

這裡寫圖片描述

可以看出,這兩個按鈕並不是1:2,那是為什麼呢,我們來算下,

現在兩個按鈕的寬度都為wrap_content,所以剩下的屏幕寬度為:

math_parent - 2*wrap_content,權重為1:2

則btn1所占寬度為:本身寬度 + 剩下屏幕的寬度的1/3 = wrap_content
+ 1/3(math_parent - 2*wrap_content)

btn2所占的寬度為:本身寬度 + 剩下屏幕的寬度的2/3 = wrap_content
+ 2/3(math_parent - 2*wrap_content)

看這兩個式子好像不能一眼看不出來,我們來個帶個數,假設wrap_content = 120dp,math_parent = 900dp

那麼btn1所占寬度為:340dp

btn2所占寬度為:560dp

現在知道為什麼不是1:2了吧

c.

效果:

這裡寫圖片描述

大家可以看到,btn2的權重已經設的很大了,btn1的權重為1,但是btn1仍然能夠顯示。

繼續來算下,現在兩個按鈕的寬度都為wrap_content,所以剩下的屏幕寬度為:

math_parent - 2*wrap_content,權重為1:2000

則btn1所占寬度為:本身寬度 + 剩下屏幕的寬度的1/2001 = wrap_content
+ 1/2001(math_parent - 2*wrap_content)

btn2所占的寬度為:本身寬度 + 剩下屏幕的寬度的2000/2001 = wrap_content
+ 2000/2001 (math_parent - 2*wrap_content)

現在可以知道為什麼權重不管多大,都不能占滿全屏的原因了吧。

②第二種情況(寬度為math_parent):

a.

效果:

這裡寫圖片描述

現在兩個按鈕的寬度都為match_parent,所以剩下的屏幕寬度為:

math_parent - 2*match_parent = -match_parent,權重為1:1

則btn1所占寬度為:本身寬度 + 剩下屏幕的寬度的1/2 = match_parent
+ 1/2(math_parent - 2*match_parent) = 1/2match_parent

btn2所占的寬度為:本身寬度 + 剩下屏幕的寬度的1/2 = match_parent
+ 1/2(math_parent - 2*match_parent) = 1/2match_parent

從上面看到兩式相等,所以兩個按鈕應該是平分整個屏幕寬度

b.

效果:

這裡寫圖片描述

大家可以看到一個很奇怪的現象,btn2的權重更大,但是它反而比btn1占的寬度更少了,為什麼呢,算一算。

現在兩個按鈕的寬度都為match_parent,所以剩下的屏幕寬度為:

math_parent - 2*match_parent = -match_parent,權重為1:2

則btn1所占寬度為:本身寬度 + 剩下屏幕的寬度的1/3 = match_parent
+ 1/3(math_parent - 2*match_parent) = 2/3match_parent

btn2所占的寬度為:本身寬度 + 剩下屏幕的寬度的2/3 = match_parent
+ 2/3(math_parent - 2*match_parent) = 1/3match_parent

現在知道為什麼了吧。

c.

效果:

這裡寫圖片描述

為什麼只看到btn1呢

現在兩個按鈕的寬度都為match_parent,所以剩下的屏幕寬度為:

math_parent - 2*match_parent = -match_parent,權重為1:2000

則btn1所占寬度為:本身寬度 + 剩下屏幕的寬度的1/2001 = match_parent
+ 1/2001(math_parent - 2*match_parent) = 2000/2001match_parent

btn2所占的寬度為:本身寬度 + 剩下屏幕的寬度的2000/2001= match_parent
+ 2000/2001(math_parent - 2*match_parent) = 1/2001match_parent

這樣可以看出btn2的寬度基本可以忽略不計了。

③第三種情況(0dp):

通過上面的示例,大家都應該知道怎麼算權重了吧,這裡就演示下1:2的情況

效果:

這裡寫圖片描述

現在兩個按鈕的寬度都為0dp,所以剩下的屏幕寬度為:

math_parent - 2*0 = match_parent,權重為1:2

則btn1所占寬度為:本身寬度 + 剩下屏幕的寬度的1/3 =
0 + 1/3(math_parent - 2*0) = 1/3match_parent

btn2所占的寬度為:本身寬度 + 剩下屏幕的寬度的2/3 =
0+ 2/3(math_parent - 2*0) = 2/3match_parent

可以看出btn1和btn2實際的寬度比就等於它們的權重比。

總結:

①權重是把屏幕剩余空間按比例分配

②如果wrap_content,那麼權重越大,位置占的越多,再小小不過wrap_content

③如果match_parent,那麼權重越大,位置占的越少,再大大不過match_parent

④如果使用0dp,則實際的寬度比就等於權重比

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved