Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android實習收獲:UI細節bug引發的layout_weight深入理解

Android實習收獲:UI細節bug引發的layout_weight深入理解

編輯:關於Android編程

今天在修改一個布局問題時候,發現自己對權重的理解還不夠。

首先問題如圖:

這裡寫圖片描述

一個TextView沒有按要求顯示完整,顯示成了2行。

怎麼辦呢?

方法1:是把它左面的字體放小。
結果師兄說不可以隨意修改布局的尺寸,否則測試還會提bug。

方法2:不讓改字體,那就修改邊距,圖片的margin,textView的magin,統統改了遍。
結果可想而知,這麼大的變動更不可以。

師兄看我這麼愚鈍,指點了一下:不修改布局,怎樣能讓時間不論在什麼情況下都顯示呢?

我的做法:
            

            
顯示布局:

這裡寫圖片描述

還是那樣。 為什麼呢? 設置layout_weight = “1”不就是為了保證它在什麼情況下都顯示嗎?怎麼回事。

4。師兄看不下去了,親自示范給我,代碼如下:

 

            
哇塞,這次ok了:
這裡寫圖片描述

雖然一樣都是設置layout_weight,但是設置在什麼位置就顯示出了對它的理解。

我之前的理解一直都是把某個組件的寬或者高設置為0,然後再設置個權重為1,它就會填充所有剩下的空間。事實上很多時候也奏效了。

android:layout_weight的理解,結合這次的問題,好好思考了一下layout_weight的用法。

用法總結:

最常見的使用權重都是設置寬或者高為0dp,然後設置權重為1.而且整個布局中只有這一個權重。

比如說在一個listView下有個button,listView高度不確定,想讓button始終顯示,就給listView設置個權重。 為什麼這麼用會有這樣的效果呢? 首先要明白,layout_weight表示的是對剩余空間的占有比例,我再強調一下,是剩余! 既然是挑剩下的,那自然應該先讓除他以外的其他組件顯示。 就比如說開篇的那個問題,想讓顯示時間的TextView不論何時都顯示,就給其他的某個不太重要的組件設置權重,讓那個不重要的自己根據剩余空間顯示大小。

還有的時候我們布局中不僅一個權重,比如說為了屏幕適配,給布局中的所有子組件都設置權重,那麼子組件就會占據權重響應的比例。

比如說:

這裡寫圖片描述
- button1會占據2/3的位置,button2會占據1/3.
- 注意,兩個Button的寬度都是0dp

3.在2的情況下,我們設置Button的寬度為wrap_content:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">

這裡寫圖片描述

還是之前強調的,layout_weight分配的是剩余的空間。 上述代碼中我們將2個按鈕的寬度都設為wrap_content,假設他倆寬度都是2,整個布局寬度為10. 那麼button1實際得到的寬度是:2 + (10 -2 -2)*(2/3) = 6 button2實際得到的寬度是: 2 + (10 -2 -2)*(1/3) = 4

4.在3的情況下,我們設置Button的寬度為match_parent:

這裡寫圖片描述

我們看到1和2的比例相反了,為什麼呢? 上述代碼中我們將第一個按鈕就設置為match_parent,即填充整個布局。第二個也設置為match_parent,如果沒有權重,第二個是不會顯示的。 如果兩個組件所占的空間之和超過了整個空間的大小,假設整個布局的寬度為10,2個按鈕由於設置match_parent理論上的寬度也分別為10,這樣2個組件超過了空間,該怎麼分配呢? 超出的部分也按照權重來分,不過是在組件原來占有空間的基礎上來減去這個值 所以2個按鈕實際得到的大小為: button1實際得到的寬度是:10-(10+10-10)*2/3=1/3個空間大小 button2實際得到的寬度是: 10-(10+10-10)*1/3=2/3個空間大小。

這就解釋了為什麼有時候weight值大,占有的權重反而小。

權重所占的比例與對應的寬度、高度有關,視情況而定,不可死記硬背。

不過要理解的就是分配的是剩下的空間,優先級最低。

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