你了解yout_weight屬性嗎?

相信大家應(yīng)該都用過(guò)LinearLayout的android:layout_weight屬性,android:layout_weight是線性布局LinearLayout中非常重要的一個(gè)屬性,它的主要作用是分配剩余空間,所謂的剩余空間是線性布局中把子組件所占的空間分配后剩余的空間铺韧,每個(gè)子組件占用剩余的比例等于自身所設(shè)的layout_weight參數(shù)乘以所有子組件所設(shè)置layout_weight參數(shù)之和,下面就以LinearLayout的horizontal方向舉例

計(jì)算公式:
剩余空間 = 父組件的寬度 - 各子組件所設(shè)置的寬或所占的寬
子組件所占空間 = 所設(shè)置的寬或所占寬 + layout_weight * 剩余空間

*注: 最終子組件所占用的空間大小 與 android:layout_width 屬性有很大關(guān)系,以下分別舉例 *

設(shè)置值為: match_parent

首先看一下布局xml:

<TextView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="match_parent情況:(1:2:3)"/>

      <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="30dp"
          android:orientation="horizontal">
          <TextView
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:layout_weight="1"
              android:gravity="center"
              android:text="item1"
              android:background="#FF0000"/>
          <TextView
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:layout_weight="2"
              android:gravity="center"
              android:text="item2"
              android:background="#00FF00"/>

          <TextView
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:layout_weight="3"
              android:gravity="center"
              android:text="item3"
              android:background="#FF00FF"/>
      </LinearLayout>

效果圖如下:


QQ截圖20161021182817.png

看到效果圖后是不是覺(jué)得很驚訝灶搜,怎么只顯示1祟蚀、2,而3沒(méi)顯示出來(lái)割卖。不要著急前酿,我們根據(jù)計(jì)算公式,一步一步來(lái)解析鹏溯,查看xml布局可以看到各子組件android:layout_weight之和為6罢维,TextView1、TextView2丙挽、TextView3各占剩余空間比例為1/6肺孵、2/6、3/6颜阐。各子組件和父組件寬度屬性都為android:layout_width="match_parent"平窘,即都撐滿整個(gè)屏幕寬度,套用公式可以得出:

剩余空間 = 屏幕寬度 - TextView1所設(shè)置寬度(即屏幕寬度) - TextView2所設(shè)置寬度(即屏幕寬度) - TextView3所設(shè)置寬度(即屏幕寬度) = -2個(gè)屏幕寬度(是的凳怨,你沒(méi)看錯(cuò)瑰艘。此處剩余空間為負(fù)
那么組件1所占空間 = TextView1所設(shè)置寬度(即屏幕寬度) + 1/6 * (-2個(gè)屏幕寬度) = 2/3個(gè)屏幕寬度
組件2所占空間 = TextView2所設(shè)置寬度(即屏幕寬度) + 2/6 * (-2個(gè)屏幕寬度) = 1/3個(gè)屏幕寬度
組件3所占空間 = TextView3所設(shè)置寬度(即屏幕寬度) + 3/6 * (-2個(gè)屏幕寬度) = 0

根據(jù)計(jì)算,我們可以看到組件3所占空間為0肤舞,且組件1和組件2所占空間比為2:1紫新,和效果圖一樣。

設(shè)置值為: wrap_content

看一下布局xml

 <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="wrap_content:(1:2:3)"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:orientation="horizontal">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="item1"
                android:background="#FF0000"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:gravity="center"
                android:text="item2"
                android:background="#00FF00"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="3"
                android:gravity="center"
                android:text="item3"
                android:background="#FF00FF"/>
        </LinearLayout>

效果圖如下:


QQ截圖20161021182825.png

  可以看到各子組件android:layout_weight之和為6李剖,TextView1芒率、TextView2、TextView3各占剩余空間比例為1/6篙顺、2/6偶芍、3/6充择。各子組件所設(shè)置android:layout_width屬性為wrap_content,即依內(nèi)容而定腋寨,此處為各自文本字符串1聪铺、2化焕、3的寬度萄窜;父組件寬度屬性為android:layout_width="match_parent",即撐滿整個(gè)屏幕寬度撒桨,套用公式可以得出:

剩余空間 = 屏幕寬度 - 字符串1寬度 - 字符串2寬度 - 字符串3寬度
子組件1所占空間 = TextView1內(nèi)容寬度 + 1/6 * 剩余空間
子組件2所占空間 = TextView2內(nèi)容寬度 + 2/6 * 剩余空間
字組件3所占空間 = TextView3內(nèi)容寬度 + 3/6 * 剩余空間

主意:主意使用wrap_content值的時(shí)候查刻,是會(huì)計(jì)算組件內(nèi)容寬度的,而不是從0計(jì)算的

設(shè)置值為: 0dp

還是先看一下布局xml

<!--wrap_content情況和上面的一樣所以就不寫(xiě)了-->
<TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="0dp:(1:2:3)"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:orientation="horizontal">
            <TextView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="item1"
                android:background="#FF0000"/>
            <TextView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:gravity="center"
                android:text="item2"
                android:background="#00FF00"/>

            <TextView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="3"
                android:gravity="center"
                android:text="item3"
                android:background="#FF00FF"/>
        </LinearLayout>

跟wrap_content對(duì)比后的效果圖:


QQ截圖20161021185119.png

通過(guò)效果圖對(duì)比可以看到android:layout_weight之和為同樣都是6凤类,各子組件所占比例同樣都是1/6穗泵、2/6、3/6谜疤。但是為什么兩種布局方式子組件所占空間大小卻不同那佃延?答案我就不寫(xiě)了,相信只要仔細(xì)看過(guò)文章都能知道答案了夷磕!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末履肃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子坐桩,更是在濱河造成了極大的恐慌尺棋,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绵跷,死亡現(xiàn)場(chǎng)離奇詭異膘螟,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)碾局,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)荆残,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人净当,你說(shuō)我怎么就攤上這事内斯。” “怎么了蚯瞧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵嘿期,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我埋合,道長(zhǎng)备徐,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任甚颂,我火速辦了婚禮蜜猾,結(jié)果婚禮上秀菱,老公的妹妹穿的比我還像新娘。我一直安慰自己蹭睡,他們只是感情好衍菱,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著肩豁,像睡著了一般脊串。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上清钥,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天琼锋,我揣著相機(jī)與錄音,去河邊找鬼祟昭。 笑死缕坎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的篡悟。 我是一名探鬼主播谜叹,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼搬葬!你這毒婦竟也來(lái)了荷腊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤踩萎,失蹤者是張志新(化名)和其女友劉穎停局,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體香府,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡董栽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了企孩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锭碳。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖勿璃,靈堂內(nèi)的尸體忽然破棺而出擒抛,到底是詐尸還是另有隱情,我是刑警寧澤补疑,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布歧沪,位于F島的核電站,受9級(jí)特大地震影響莲组,放射性物質(zhì)發(fā)生泄漏诊胞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一锹杈、第九天 我趴在偏房一處隱蔽的房頂上張望撵孤。 院中可真熱鬧迈着,春花似錦、人聲如沸邪码。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闭专。三九已至奴潘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喻圃,已是汗流浹背萤彩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工粪滤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斧拍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓杖小,卻偏偏與公主長(zhǎng)得像肆汹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子予权,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容