更新時間:2017-05-29 來源:黑馬程序員Android+物聯(lián)網(wǎng)培訓學院 瀏覽量:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity" >
<!--內(nèi)部控件水平排列-->
<TextView
android:layout_width="0dp"
android:layout_height="120dp"
android:layout_weight="3"
android:background="@android:color/black"/>
<TextView
android:layout_width="0dp"
android:layout_height="120dp"
android:layout_weight="1"
android:background="@android:color/holo_green_dark"/>
</LinearLayout>
當前屏幕橫屏寬度:320dp
第一個子控件未分配權重前所占寬度:0dp
第二個子控件未分配權重前所占寬度:0dp
當前屏幕剩余空間總數(shù):320dp-0dp-0dp = 320dp,將當前320dp按權重分配給兩個子控件,子控件一分配到四分之三,子控件二分配到四分之一
第一個子控件分配權重后寬度:0dp+((320dp-0dp-0dp)*3)/4 = 240dp
第二個子控件分配權重后寬度:0dp+(320dp-0dp-0dp)/4 = 80dp
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity" >
<TextView
android:layout_width="60dp"
android:layout_height="120dp"
android:layout_weight="3"
android:background="@android:color/black"/>
<TextView
android:layout_width="60dp"
android:layout_height="120dp"
android:layout_weight="1"
android:background="@android:color/holo_green_dark"/>
</LinearLayout>
當前屏幕橫屏寬度:320dp
第一個子控件未分配權重前所占寬度:60dp
第二個子控件未分配權重前所占寬度:60dp
當前屏幕剩余空間總數(shù):320dp-60dp-60dp = 200dp,將當前200dp按權重分配給兩個子控件,子控件一分配到四分之三,子控件二分配到四分之一
第一個子控件分配權重后寬度:60dp+((320dp-60dp-60dp)*3)/4 = 210dp
第二個子控件分配權重后寬度:60dp+(320dp-60dp-60dp)/4 = 110dp
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity" >
<TextView
android:layout_width="260dp"
android:layout_height="120dp"
android:layout_weight="3"
android:background="@android:color/black"/>
<TextView
android:layout_width="260dp"
android:layout_height="120dp"
android:layout_weight="1"
android:background="@android:color/holo_green_dark"/>
</LinearLayout>
當前屏幕橫屏寬度:320dp
第一個子控件未分配權重前所占寬度:260dp
第二個子控件未分配權重前所占寬度:260dp
當前屏幕剩余空間總數(shù):320dp-260dp-260dp = -200dp,將當前-200dp按權重分配給兩個子控件,子控件一分配到四分之三,子控件二分配到四分之一
第一個子控件分配權重后寬度:260dp+((320dp-260dp-260dp)*3)/4 = 110dp
第二個子控件分配權重后寬度:260dp+(320dp-260dp-260dp)/4 = 210dp
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity" >
<TextView
android:layout_width="fill_parent"
android:layout_height="120dp"
android:layout_weight="3"
android:background="@android:color/black"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="120dp"
android:layout_weight="1"
android:background="@android:color/holo_green_dark"/>
</LinearLayout>
當前屏幕橫屏寬度:320dp
第一個子控件未分配權重前所占寬度:fill_parent 即為充滿橫屏
第二個子控件未分配權重前所占寬度:fill_parent 即為充滿橫屏
當前屏幕剩余空間總數(shù):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
中內(nèi)部子控件
(A,B)
的寬度之和大于
L
的總寬度時,即
(width_l-width_a-width_b)<0
時,
weight_a/(weight_a+weight_b)
比例的值越大,當前控件所占空間越小。
情況
2
:當
L
中內(nèi)部子控件
(A,B)
的寬度之和小于
L
的總寬度時,即
(width_l-width_a-width_b)>0
時,
weight_a/(weight_a+weight_b)
比例的值越大,當前控件所占空間越大。
本文版權歸黑馬程序員Android培訓學院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:黑馬程序員Android+物聯(lián)網(wǎng)培訓學院
首發(fā):http://android.itheima.com
Android+物聯(lián)網(wǎng)培訓實戰(zhàn)教程之 9patch圖詳解
2017-05-29Android+物聯(lián)網(wǎng)培訓之Android應用開發(fā)基礎之多線程下載
2017-05-29Android+物聯(lián)網(wǎng)培訓之Android應用開發(fā)基礎之Tomcat默認碼表
2017-05-29Android+物聯(lián)網(wǎng)培訓之Android應用開發(fā)基礎之Get和Post請求
2017-05-29Android+物聯(lián)網(wǎng)培訓之Android應用開發(fā)基礎之Android下的消息機制
2017-05-29Android+物聯(lián)網(wǎng)培訓之Android應用開發(fā)基礎之Android 單元測試
2017-05-29