Android常用幾種布局

一、線性布局LinearLayout

1、排列方向:orientation設(shè)置
2、weight屬性:占比
剩余空間的占比。

比如,如果有text1和text2,假設(shè)每個(gè)text的寬度是120px,那么在1080px的屏幕上,剛開始剩余空間是840px,假設(shè)text1占比1,text2占比2,那么text1的寬度是120+840/3=400排序,text2寬度=120+840/32=680px,顯示效果text2比text1寬度大。
如果text1和text2均設(shè)置為match_parent,假設(shè)text1占比1,text2占比2,此時(shí)text1則會(huì)比text2大。因?yàn)?,一開始text1和text2占用的都是1080px,剩余的空間就是1080-1080
2=-1080px,是負(fù)數(shù),因此text1的寬度是1080+(-1080)/3=720px,text2的寬度為1080+(-1080)/3*2=360px,所以text1的寬度比text2的還大。

3、layout_gravity
linearLayout中設(shè)置layout_gravity無效,因?yàn)閘inearLayout是線性布局,必須從左到右或從上到下排列。
注意:match_parent指占用父控件剩下的空間的全部。

所以,
當(dāng)text1和text2都占用match_parent時(shí),text1將獲得父控件剩余的全部空間,text2將占用0;結(jié)果是text1可見且占滿這個(gè)父控件而text2不可見。
當(dāng)text1占用wrap_content時(shí),text1先占用一部分空間,text2占用剩下的父控件的全部空間,結(jié)果是text1和text2均可見且text1大小小于text2的大小。

4、weightSum——子控件weight的最大占比

例如父控件weight_sum為n,子控件A的layout_weight為a,子控件B的layout_weight為b,則
子控件A占用空間為= 子控件A原本大小+a/n*剩余空間大小。
如果子控件長度最后大于父控件長度,將超出父控件的范圍,子控件無法顯示全部。

5、設(shè)置分割線

    android:showDividers="middle"
    android:divider="@android:color/black"

二、幀布局FrameLayout

1、特點(diǎn)
往里面添加控件時(shí)默認(rèn)添加到左上角,且沒有任何的定位方式可以定位(layout_gravity除外),其大小由最大的子控件決定。
2、常用屬性
android:foreground:幀布局的前景圖像
android:foregroundGravity:幀布局的前景圖像的顯示位置

三、相對(duì)布局RelativeLayout

四、約束布局ConstraintLayout

[參考]https://juejin.im/entry/5bb18966f265da0aea698c58
1、簡介

ConstrainLayout是一個(gè)允許開發(fā)者靈活地設(shè)置控件的位置和大小的ViewGroup。 只要你使用的Android系統(tǒng)版本在9以上,你便可以通過添加依賴的方式來使用ConstrainLayout.

2、使用
添加依賴

    implementation 'com.android.support.constraint:constraint-layout:1.1.3'

3、常用約束
-相對(duì)定位(Relative positioning)

相對(duì)定位是ConstrainLayout構(gòu)建布局的一種基本方式。相對(duì)定位約束可以幫助我們通過一個(gè)給定的Widget來擺放另外一個(gè)Widget。我們可以在橫縱兩個(gè)方向上約束Widget。
橫向: left, right, start and end sides 縱向: top, bottom sides and text baseline

    <Button android:id="@+id/buttonA" ... />
    <Button android:id="@+id/buttonB" ...
            app:layout_constraintLeft_toRightOf="@+id/buttonA" />

總結(jié):LinearLayout線性布局內(nèi)部實(shí)現(xiàn)時(shí)必定是鏈表或隊(duì)列的形式;FrameLayout幀布局采用棧的數(shù)據(jù)存儲(chǔ)格式,所以每次添加新的組件都會(huì)覆蓋顯示;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容