Android常用布局使用技巧示例講解
一、FrameLayout 幀布局
這種布局類似疊加的圖片,沒(méi)有任何的定位方式,當(dāng)我們往里面添加組件的時(shí)候,會(huì)默認(rèn)把他們放到容器的左上角。
上面的組件顯示在底層,下面的組件顯示在上層。
如下代碼,視圖1顯示在最底層,視圖3顯示在最上層
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="400dp" android:layout_height="400dp" android:gravity="bottom|end" android:text="視圖1" android:background="@color/purple_200" android:textColor="@color/white" android:textSize="60sp" /> <TextView android:layout_width="300dp" android:layout_height="300dp" android:gravity="bottom|end" android:text="視圖2" android:background="@color/teal_200" android:textColor="@color/white" android:textSize="60sp" /> <TextView android:layout_width="200dp" android:layout_height="200dp" android:gravity="bottom|end" android:text="視圖3" android:background="@color/teal_700" android:textColor="@color/white" android:textSize="60sp" /> </FrameLayout>
二、ConstraintLayout 約束布局
從 Android Studio 2.3 起,官方的模板默認(rèn)使用 ConstraintLayout,它的出現(xiàn)主要是為了解決布局嵌套過(guò)多的問(wèn)題,以靈活的方式定位和調(diào)整小部件。
ConstraintLayout和RelativeLayout有點(diǎn)像,比RelativeLayout更靈活,性能更出色??梢园凑毡壤s束控件位置和尺寸,能夠更好地適配屏幕大小不同的機(jī)型。
1、相對(duì)定位
常用屬性:
- layout_constraintLeft_toLeftOf:左邊和目標(biāo)組件的左邊對(duì)齊
- layout_constraintLeft_toRightOf:左邊和目標(biāo)組件的右邊對(duì)齊
- layout_constraintRight_toLeftOf:右邊和目標(biāo)組件的左邊對(duì)齊
- layout_constraintRight_toRightOf:右邊和目標(biāo)組件的右邊對(duì)齊
- layout_constraintTop_toTopOf:上邊和目標(biāo)組件的上邊對(duì)齊
- layout_constraintTop_toBottomOf:上邊和目標(biāo)組件的下邊對(duì)齊
- layout_constraintBottom_toTopOf:下邊和目標(biāo)組件的上邊對(duì)齊
- layout_constraintBottom_toBottomOf:下邊和目標(biāo)組件的下邊對(duì)齊
- layout_constraintBaseline_toBaselineOf:文本基線對(duì)齊,如兩個(gè)TextView的高度不一致,但是又希望他們文本對(duì)齊
- layout_constraintStart_toStartOf:同layout_constraintLeft_toLeftOf
- layout_constraintStart_toEndOf:同layout_constraintLeft_toRightOf
- layout_constraintEnd_toStartOf:同layout_constraintRight_toLeftOf
- layout_constraintEnd_toEndOf:同layout_constraintRight_toRightOf
- layout_constraintHorizontal_bias:左右約束時(shí)的水平偏移量,可設(shè)置0-1的數(shù)值,默認(rèn)0.5居中
- layout_constraintVertical_bias:上下約束時(shí)的垂直偏移量,可設(shè)置0-1的數(shù)值,默認(rèn)0.5居中
- layout_constraintHorizontal_weight:水平權(quán)重值,可以是任意數(shù)值,在0dp時(shí)生效
- layout_constraintVertical_weight:垂直權(quán)重,可以是任意數(shù)值,在0dp時(shí)生效
- layout_constraintDimensionRatio:寬高比,當(dāng)寬或高至少有一個(gè)尺寸被設(shè)置為0dp時(shí)可設(shè)置比例,如(1:2)
示例代碼,計(jì)算器布局:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/c_view1" android:layout_height="wrap_content" android:layout_width="match_parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:layout_gravity="fill" android:gravity="end" android:layout_marginStart="5dp" android:layout_marginEnd="5dp" android:layout_marginTop="5dp" android:background="#FFCCCC" android:text="0" android:textSize="50sp" /> <Button android:layout_height="wrap_content" android:layout_width="0dp" app:layout_constraintTop_toBottomOf="@id/c_view1" app:layout_constraintStart_toStartOf="@id/c_view1" app:layout_constraintEnd_toStartOf="@id/btn_qk" android:layout_marginEnd="5dp" android:textSize="40sp" android:id="@+id/btn_ht" android:text="回退" /> <Button android:id="@+id/btn_qk" android:layout_height="0dp" android:layout_width="0dp" app:layout_constraintEnd_toEndOf="@id/c_view1" app:layout_constraintStart_toEndOf="@id/btn_ht" app:layout_constraintTop_toBottomOf="@id/c_view1" app:layout_constraintBottom_toBottomOf="@id/btn_ht" android:textSize="40sp" android:text="清空" /> <Button android:text="+" android:id="@+id/btn_jia" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_marginEnd="5dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_ht" app:layout_constraintStart_toStartOf="@id/btn_ht" app:layout_constraintEnd_toStartOf="@id/btn_01" /> <Button android:text="1" android:id="@+id/btn_01" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_marginEnd="5dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_ht" app:layout_constraintStart_toEndOf="@id/btn_jia" app:layout_constraintEnd_toStartOf="@id/btn_02" /> <Button android:text="2" android:id="@+id/btn_02" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_marginEnd="5dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_ht" app:layout_constraintStart_toEndOf="@id/btn_01" app:layout_constraintEnd_toStartOf="@id/btn_03" /> <Button android:text="3" android:id="@+id/btn_03" android:layout_height="wrap_content" android:layout_width="0dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_ht" app:layout_constraintStart_toEndOf="@id/btn_02" app:layout_constraintEnd_toEndOf="@id/btn_qk" /> <Button android:text="-" android:id="@+id/btn_jian" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_marginEnd="5dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_jia" app:layout_constraintStart_toStartOf="@id/btn_ht" app:layout_constraintEnd_toStartOf="@id/btn_04" /> <Button android:text="4" android:id="@+id/btn_04" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_marginEnd="5dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_jia" app:layout_constraintEnd_toStartOf="@id/btn_05" app:layout_constraintStart_toEndOf="@id/btn_jian" /> <Button android:text="5" android:id="@+id/btn_05" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_marginEnd="5dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_jia" app:layout_constraintEnd_toStartOf="@id/btn_06" app:layout_constraintStart_toEndOf="@id/btn_04" /> <Button android:text="6" android:id="@+id/btn_06" android:layout_height="wrap_content" android:layout_width="0dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_jia" app:layout_constraintStart_toEndOf="@id/btn_05" app:layout_constraintEnd_toEndOf="@id/btn_qk" /> <Button android:text="*" android:id="@+id/btn_xin" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_marginEnd="5dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_jian" app:layout_constraintStart_toStartOf="@id/btn_ht" app:layout_constraintEnd_toStartOf="@id/btn_07" /> <Button android:text="7" android:id="@+id/btn_07" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_marginEnd="5dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_jian" app:layout_constraintEnd_toStartOf="@id/btn_08" app:layout_constraintStart_toEndOf="@id/btn_xin" /> <Button android:text="8" android:id="@+id/btn_08" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_marginEnd="5dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_jian" app:layout_constraintEnd_toStartOf="@id/btn_09" app:layout_constraintStart_toEndOf="@id/btn_07" /> <Button android:text="9" android:id="@+id/btn_09" android:layout_height="wrap_content" android:layout_width="0dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_jian" app:layout_constraintStart_toEndOf="@id/btn_08" app:layout_constraintEnd_toEndOf="@id/btn_qk" /> <Button android:text="/" android:id="@+id/btn_chu" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_marginEnd="5dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_xin" app:layout_constraintStart_toStartOf="@id/btn_ht" app:layout_constraintEnd_toStartOf="@id/btn_dian" /> <Button android:text="." android:id="@+id/btn_dian" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_marginEnd="5dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_xin" app:layout_constraintEnd_toStartOf="@id/btn_00" app:layout_constraintStart_toEndOf="@id/btn_chu" /> <Button android:text="0" android:id="@+id/btn_00" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_marginEnd="5dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_xin" app:layout_constraintEnd_toStartOf="@id/btn_deng" app:layout_constraintStart_toEndOf="@id/btn_dian" /> <Button android:text="=" android:id="@+id/btn_deng" android:layout_height="wrap_content" android:layout_width="0dp" app:layout_constraintHorizontal_weight="1" app:layout_constraintTop_toBottomOf="@id/btn_xin" app:layout_constraintStart_toEndOf="@id/btn_00" app:layout_constraintEnd_toEndOf="@id/btn_qk" /> </androidx.constraintlayout.widget.ConstraintLayout>
2、角度定位
常用屬性:
- layout_constraintCircle:角度定位參照目標(biāo)組件
- layout_constraintCircleAngle:偏移角度,參照組件垂直方向往右邊轉(zhuǎn)動(dòng)角度
- layout_constraintCircleRadius:距離
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!-- 按鈕1 屏幕居中 --> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="94dp" android:text="按鈕1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> <!-- 按鈕2 相對(duì)按鈕1旋轉(zhuǎn)120度,且距離按鈕1中心點(diǎn)120dp --> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:text="按鈕2" app:layout_constraintCircle="@id/button" app:layout_constraintCircleAngle="120" app:layout_constraintCircleRadius="120dp" /> </androidx.constraintlayout.widget.ConstraintLayout>
3、權(quán)重和0dp
- 如果layout_width設(shè)置為0dp,那么控件就會(huì)水平鋪開(kāi)撐滿所有空間
- 如果layout_height設(shè)置為0dp,那么控件就會(huì)垂直鋪開(kāi)撐滿所有空間
- layout_constraintHorizontal_weight:設(shè)置權(quán)重值,可以是任意數(shù)值
4、控件排成一排平均分布(默認(rèn))
一條鏈的第一個(gè)控件是這條鏈的鏈頭,我們可以在鏈頭中設(shè)置layout_constraintHorizontal_chainStyle來(lái)改變整條鏈的樣式。chains提供了3種樣式,分別是:
- CHAIN_SPREAD:展開(kāi)元素平均分布 (默認(rèn))
- CHAIN_SPREAD_INSIDE:展開(kāi)元素,但鏈的兩端貼近parent
- CHAIN_PACKED:鏈的元素將被打包在一起
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕1" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@id/button2" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕2" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toRightOf="@+id/button" app:layout_constraintRight_toLeftOf="@id/button3" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕3" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toRightOf="@id/button2" app:layout_constraintRight_toRightOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
5、Group分組
Group可以把多個(gè)控件歸為一組,方便隱藏或顯示一組控件
<androidx.constraintlayout.widget.Group android:id="@+id/group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="invisible" app:constraint_referenced_ids="btn_deng,btn_00,btn_dian"/>
6、Barrier屏障
Barrier只是用來(lái)輔助布局,不會(huì)顯示在頁(yè)面上,其他組件可以和Barrier做約束。
- constraint_referenced_ids:參考的組件id列表,多個(gè)用逗號(hào)(,)隔開(kāi)
- barrierDirection:屏障位于參考組件的位置,可選值(left、right、top、bottom、start、end)
<androidx.constraintlayout.widget.Barrier android:id="@+id/barrier" android:layout_width="wrap_content" android:layout_height="wrap_content" app:barrierDirection="right" app:constraint_referenced_ids="btn_01,btn_02" />
到此這篇關(guān)于Android常用布局使用技巧示例講解的文章就介紹到這了,更多相關(guān)Android常用布局內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android數(shù)據(jù)存儲(chǔ)方式操作模式解析
這篇文章主要為大家介紹了Android數(shù)據(jù)存儲(chǔ)方式操作模式解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Android消息通知欄的實(shí)現(xiàn)方法介紹
本篇文章是對(duì)Android消息通知欄的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06Android實(shí)現(xiàn)仿網(wǎng)易新聞的頂部導(dǎo)航指示器
這篇文章主要介紹了Android實(shí)現(xiàn)仿網(wǎng)易新聞的頂部導(dǎo)航指示器的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08android隱式意圖激活自定義界面和系統(tǒng)應(yīng)用界面的實(shí)例
下面小編就為大家?guī)?lái)一篇android隱式意圖激活自定義界面和系統(tǒng)應(yīng)用界面的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Android生成隨機(jī)數(shù)的方法實(shí)例
這篇文章主要為大家詳細(xì)介紹了Android生成隨機(jī)數(shù)的方法實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03Android SdkVersion的區(qū)別及獲取版本信息方法
下面小編就為大家?guī)?lái)一篇Android SdkVersion的區(qū)別及獲取版本信息方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03Android利用FlexboxLayout輕松實(shí)現(xiàn)流動(dòng)布局
flexbox是屬于CSS的一種布局方案,可以簡(jiǎn)單、完整、響應(yīng)式的實(shí)現(xiàn)各種頁(yè)面布局。谷歌將其引入以提高復(fù)雜布局的能力。下面這篇文章主要給大家介紹了在Android中利用FlexboxLayout輕松實(shí)現(xiàn)流動(dòng)布局的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-04-04Android自定義view實(shí)現(xiàn)圓環(huán)效果實(shí)例代碼
本文通過(guò)實(shí)例代碼給大家介紹了Android自定義view實(shí)現(xiàn)圓環(huán)效果,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07詳解Android中Runtime解決屏幕旋轉(zhuǎn)問(wèn)題(推薦)
這篇文章主要介紹了Runtime解決屏幕旋轉(zhuǎn)問(wèn)題的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09