剖析Android 線性佈局中的權重(layout_weight)(解答疑惑)
阿新 • • 發佈:2019-02-12
android:layout_width="fill_parent"<textview< div="" style="word-wrap: break-word; outline: none;">
android:layout_height="120dp"
android:layout_weight="1"
android:background="@android:color/holo_green_dark"/>
當前佈局效果如圖1-4所示。
從圖1-4可以看出,黑色部分的寬度是80畫素,綠色部分的寬度是240畫素,這兩部分所佔區域寬度的計算方式如下所示:
當前螢幕橫屏寬度:320dp
第一個子控制元件未分配權重前所佔寬度:fill_parent 即為充滿橫屏
第二個子控制元件未分配權重前所佔寬度:fill_parent 即為充滿橫屏
當前螢幕剩餘空間總數:320dp-320dp-320dp = -320dp,將當前-320dp按權重分配給兩個子控制元件,子控制元件一分配到四分之三,子控制元件二分配到四分之一
第一個子控制元件分配權重後寬度:320dp+((320dp-320dp-320dp)*3)/4 = 80dp
第二個子控制元件分配權重後寬度:320dp+(320dp-320dp-320dp)/4 = 240dp
案例總結
從上述案例可以看出,如果對線性佈局中的控制元件設定了權重(layout_weight),那麼控制元件佔用的空間大小是可以計算出來的,計算公式如下:
線性佈局中子控制元件最終佔用寬度 = 原有寬度+剩餘空間分配量
例如,在水平方向上的線性佈局LinearLayout控制元件L中,包含兩個水平佔用空間的控制元件A、B,其中:
L控制元件:L控制元件寬度layout_width = width_l
A控制元件:A控制元件寬度layout_width = width_a A控制元件權重layout_weight = weight_a
B控制元件:B控制元件寬度layout_width = width_b B控制元件權重layout_weight = weight_b
L中子控制元件最終佔用寬度 = 原有寬度(width_a)+剩餘空間分配量
A所佔寬度 = width_a + (width_l-width_a-width_b)*weight_a/(weight_a+weight_b)
B所佔寬度 = width_b + (width_l-width_a-width_b)*weight_b/(weight_a+weight_b)
由此可以推斷,當使用權重(layout_weight)時,會遇到下列兩種情況:
情況1:當L中內部子控制元件(A,B)的寬度之和大於L的總寬度時,即(width_l-width_a-width_b)<0時,weight_a/(weight_a+weight_b)比例的值越大,當前控制元件所佔空間越小。
情況2:當L中內部子控制元件(A,B)的寬度之和小於L的總寬度時,即(width_l-width_a-width_b)>0時,weight_a/(weight_a+weight_b)比例的值越大,當前控制元件所佔空間越大。