1. 程式人生 > >剖析Android 線性佈局中的權重(layout_weight)(解答疑惑)

剖析Android 線性佈局中的權重(layout_weight)(解答疑惑)

           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)比例的值越大,當前控制元件所佔空間越大。