android:layout_weight屬性詳解

在android開發(fā)中LinearLayout很常用衬衬,LinearLayout的內控件的android:layout_weight在某些場景顯得非常重要,比如我們需要按比例顯示赌躺。android并沒用提供table這樣的控件县忌,雖然有TableLayout筷畦,但是它并非是我們想象中的像html里面的table那么好用,我們常用ListView實現(xiàn)table的效果黍判,但是列對齊確比較麻煩弟孟,現(xiàn)在用LinearLayout及屬性android:layout_weight能很好地解決。下面我們共同體驗下layout_weight這個屬性样悟。  
一拂募、LinearLayout內的控件的layout_width設置為"wrap_content"庭猩,請看一下xml配置:

 <LinearLayout

      android:orientation="horizontal"

      android:layout_width="fill_parent"

      android:layout_height="fill_parent"

      android:layout_weight="1"

     >

      <TextView

          android:layout_width="wrap_content"

          android:layout_height="fill_parent"

          android:layout_weight="1"

          android:background="#aa0000"

          android:gravity="center"

          android:text="1"/>

      <TextView

          android:layout_width="wrap_content"

          android:layout_height="fill_parent"

          android:layout_weight="2"

          android:background="#00aa00"

          android:gravity="center"

          android:text="1"/>

      <TextView

          android:layout_width="wrap_content"

          android:layout_height="fill_parent"

          android:layout_weight="3"

          android:background="#0000aa"

          android:gravity="center"

          android:text="1"/>

  </LinearLayout>

** 效果如下:**


android:layout_weight屬性詳解

可以看到這三個TextView是按照1:2:3的比例進行顯示的,這樣看來似乎可以實現(xiàn)按照比例顯示了陈症,但是有個問題蔼水,如果TextView內的文本長度一同那么較長文本的TextView會寬度會有所增加,見下面配置及效果:
配置:

<LinearLayout

      android:orientation="horizontal"

      android:layout_width="fill_parent"

      android:layout_height="fill_parent"

      android:layout_weight="1">

      <TextView

          android:layout_width="wrap_content"

          android:layout_height="fill_parent"

          android:layout_weight="1"

          android:background="#aa0000"

          android:gravity="center"

          android:text="1111111111111111111111111111111111111111111"/>

      <TextView

          android:layout_width="wrap_content"

          android:layout_height="fill_parent"

          android:layout_weight="2"

          android:background="#00aa00"

          android:gravity="center"

          android:text="2"/>

      <TextView

          android:layout_width="wrap_content"

          android:layout_height="fill_parent"

          android:layout_weight="3"

          android:background="#0000aa"

          android:gravity="center"

          android:text="3"/>

  </LinearLayout>

效果:


android:layout_weight屬性詳解

這樣看來我們所需要的按比例又無法實現(xiàn)了录肯,經過滿天地google終于找到了解決方案趴腋,就是設置layout_width設置為"wrap_content"。配置及效果見下:

<LinearLayout

      android:orientation="horizontal"

      android:layout_width="fill_parent"

      android:layout_height="fill_parent"

      android:layout_weight="1">

      <TextView

          android:layout_width="0dp"

          android:layout_height="fill_parent"

          android:layout_weight="1"

          android:background="#aa0000"

          android:gravity="center"

          android:text="1111111111111111111111111111111111111111111"/>

      <TextView

          android:layout_width="0dp"

          android:layout_height="fill_parent"

          android:layout_weight="2"

          android:background="#00aa00"

          android:gravity="center"

          android:text="2"/>

      <TextView

          android:layout_width="0dp"

          android:layout_height="fill_parent"

          android:layout_weight="3"

          android:background="#0000aa"

          android:gravity="center"

          android:text="3"/>

  </LinearLayout>

效果:

android:layout_weight屬性詳解

這樣終于達到我們的按比例顯示的效果了论咏,感覺很是奇怪优炬,android開發(fā)框架的大佬們有時候設計確實有點匪夷所思。
  二厅贪、LinearLayout內的控件的layout_width設置為"fill_parent"蠢护,請看一下xml配置:

<LinearLayout

      android:orientation="horizontal"

      android:layout_width="fill_parent"

      android:layout_height="fill_parent"

      android:layout_weight="1">

      <TextView

          android:layout_width="fill_parent"

          android:layout_height="fill_parent"

          android:layout_weight="1"

          android:background="#aa0000"

          android:gravity="center"

          android:text="1"/>

      <TextView

          android:layout_width="fill_parent"

          android:layout_height="fill_parent"

          android:layout_weight="2"

          android:background="#00aa00"

          android:gravity="center"

          android:text="2"/>

  </LinearLayout>

效果如下:


android:layout_weight屬性詳解

奇怪吧,整個寬度平分3塊养涮,第一個TextView占了兩塊葵硕,這樣看來weight值越小的優(yōu)先級越大。只有兩個TextView似乎看出些道理贯吓,那么讓我們看看三個是什么效果:

<LinearLayout

      android:orientation="horizontal"

      android:layout_width="fill_parent"

      android:layout_height="fill_parent"

      android:layout_weight="1">

      <TextView

          android:layout_width="fill_parent"

          android:layout_height="fill_parent"

          android:layout_weight="1"

          android:background="#aa0000"

          android:gravity="center"

          android:text="1"/>

      <TextView

          android:layout_width="fill_parent"

          android:layout_height="fill_parent"

          android:layout_weight="2"

          android:background="#00aa00"

          android:gravity="center"

          android:text="2"/>

      <TextView

          android:layout_width="fill_parent"

          android:layout_height="fill_parent"

          android:layout_weight="3"

          android:background="#0000aa"

          android:gravity="center"

          android:text="3"/>

  </LinearLayout>

效果:

android:layout_weight屬性詳解

什么意思懈凹?第三個TextView丟掉了,很是奇怪悄谐,讓我們再試一個介评,把weight分別改為2,3,4的看看效果:
android:layout_weight屬性詳解

這個效果讓人很困惑,我一直想尋求出一個確切的比例公式爬舰,但是至今未找到们陆。有哪位大神能搞定的話忘不吝賜教。
雖然這個android:layout_weight屬性很怪異洼专,但幸運的是我們達到了目標:
  按比例顯示LinearLayout內各個子控件棒掠,需設置android:layout_width="0dp",如果為豎直方向的設置android:layout_height="0dp"屁商。在這種情況下某子個控件占用LinearLayout的比例為:本控件weight值 / LinearLayout內所有控件的weight值的和烟很。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蜡镶,隨后出現(xiàn)的幾起案子雾袱,更是在濱河造成了極大的恐慌,老刑警劉巖官还,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芹橡,死亡現(xiàn)場離奇詭異,居然都是意外死亡望伦,警方通過查閱死者的電腦和手機林说,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門煎殷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腿箩,你說我怎么就攤上這事豪直。” “怎么了珠移?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵弓乙,是天一觀的道長。 經常有香客問我钧惧,道長暇韧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任浓瞪,我火速辦了婚禮懈玻,結果婚禮上,老公的妹妹穿的比我還像新娘追逮。我一直安慰自己酪刀,他們只是感情好粹舵,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布钮孵。 她就那樣靜靜地躺著,像睡著了一般眼滤。 火紅的嫁衣襯著肌膚如雪巴席。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天诅需,我揣著相機與錄音漾唉,去河邊找鬼。 笑死堰塌,一個胖子當著我的面吹牛赵刑,可吹牛的內容都是我干的。 我是一名探鬼主播场刑,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼般此,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了牵现?” 一聲冷哼從身側響起铐懊,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瞎疼,沒想到半個月后科乎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡贼急,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年茅茂,在試婚紗的時候發(fā)現(xiàn)自己被綠了捏萍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡空闲,死狀恐怖照弥,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情进副,我是刑警寧澤这揣,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站影斑,受9級特大地震影響给赞,放射性物質發(fā)生泄漏。R本人自食惡果不足惜矫户,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一片迅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧皆辽,春花似錦柑蛇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至空另,卻和暖如春盆耽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扼菠。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工摄杂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人循榆。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓析恢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秧饮。 傳聞我的和親對象是個殘疾皇子映挂,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容