Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android面試中的一個常見問題:Layout_weight的用法

Android面試中的一個常見問題:Layout_weight的用法

編輯:關於Android編程

今天在公司第一次去當了回面試官,挺帶勁的啦,發現那位面試的小伙做的卷子裡有道關於layout_weight的問題,感覺答得不是很好,遂想寫個博客(其實是想要記錄下這有意思的事,好久沒寫博客了,看完記得點贊哦),總結了以下幾個小點,幫助大家理解哈。

一、如果把每個layout_width設為0dp,layout_weight設為1,會出現什麼問題呢?
首先我先在XML中寫個布局文件,代碼如下:
代碼片段1

運行效果如下:
代碼片段2

那麼問題來了:雖然layout_weight是有效果了,但是為什麼三個TextView沒有對齊呢?
問題解析:其實三個控件間是對齊了的,只是以當中的內容對齊。這當中的問題是在父容器中存在一個android:baselineAligned = “true”,所以我們應當把它設為false。
修改代碼如下:
代碼片段3
最終效果如下:
代碼片段4

二、如果把第一個layout_width設為wrap_content,又設置了每個控件的layout_weight的權值,那麼布局會如何分配寬度呢?
代碼如下:
代碼片段5

運行的效果如下:
代碼片段6

layout_weight分配的算法是:LinearLayout中的layout_weight屬性,首先按照控件聲明的尺寸進行分配,然後再將剩下的尺寸按weight分配。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPsj9oaLI57n7sNHDv7j2bGF5b3V0X3dpZHRoyejOqm1hdGNoX3BhcmVudNauuvOjrNKyxeTWw8HLbGF5b3V0X3dlaWdodKOsxMfDtNPWysfI57rOt9bF5L/ttsi1xKO/PGJyIC8+DQq0+sLryOfPwqO6PGJyIC8+DQo8aW1nIGFsdD0="代碼片段7" src="/uploadfile/Collfiles/20160414/20160414090835117.png" title="\" />

運行效果如下:
代碼片段8

那麼問題又來了:發現第一個TextView反而比其他兩個權值更大的控件寬度更大呢?

分析:根據上面總結的分配規則,首先減去控件聲明的尺寸,父控件剩余的尺寸按比例分配。假設屏幕的寬度是720,那麼很明顯三個控件的寬度都是match_parent是不夠分的,此時分配完控件聲明的尺寸後,父控件剩余的寬度就為負數了,父控件剩余寬度rest = 720 - 720 * 3 = -720 * 2,接著就把剩余的寬度按layout_weight聲明的比例分配。下面就來具體計算各個控件的寬度:
(1)那麼就來計算第一個控件實際所分配的控件寬度:layout_width + 父控件剩余的寬度比例 –> 720 + (-720*2)/5 = 720 * (3/5)
(2)TextView2和TextView3的權值都是2,實際所分配的寬度大小就是:720 + (-720 * 2)/(2/5)= 720 * (1/5)

由此可見:上面所說的layout_weight寬度分配規則是正確的,控件寬度 + 父控件剩余寬度 * weight比例。

下面我再說下可以和layout_weight結合的一個屬性layoutSum,實現一個很有意思功能。
場景:假設只有一個控件,但是又想按比例分配寬度,怎麼解決?
代碼片段9

問題分析:此時就缺少其他控件進行比例的劃分;
解決方案:雖然只有一個控件,但可以在父布局中定義總的權值,這樣子控件就可以有權值的比例了。
實現代碼如下:
代碼片段10

四、不知道大家有沒發現XML中有些屬性是以layout開頭,像layout_gravity什麼的,而有些屬性則沒有layout開頭,這有什麼不同呢?
問題分析:layout的意思是布局,layout開頭的屬性實際上是說這些屬性由其父容器去獲取,再去設置。而沒有以layout開頭的屬性,就是由控件自己獲取設置。
總結一句話就是:Layout_開頭都是交給父容器,沒有Layout_開頭都是本身的屬性。

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