Jetpack Compose布局的使用詳細(xì)介紹
一.標(biāo)準(zhǔn)布局組件
Compose中可以將多個(gè)控件元素組合使用,例如下面這樣,
@Composable fun WidgetGroup() { Text(text = "不為往事擾") Text(text = "余生只愿笑") }
但是我們會(huì)發(fā)現(xiàn),如果僅僅是這樣,兩個(gè)文本控件會(huì)重疊在一起,類似于下面這種樣式:
如果我們想將多個(gè)控件垂直擺放在一起,可以在控件外層添加Column
:組件
@Composable fun WidgetGroup() { Column { Text(text = "不為往事擾") Text(text = "余生只愿笑") } }
如果想要水平擺放在頁面上可以使用 Row
組件
@Composable fun WidgetGroup() { Row { Text(text = "不為往事擾") Text(text = "余生只愿笑") } }
二.修飾符
如果我們還想在文字下面添加一張圖片,可以直接添加一個(gè)Image
控件:
@Composable fun WidgetGroup() { val image = imageResource(id = R.drawable.header) val imageModifier = Modifier .preferredHeight(180.dp) .fillMaxWidth() .clip(RoundedCornerShape(10.dp)) Column { Text(text = "不為往事擾") Text(text = "余生只愿笑") Spacer(modifier = Modifier.preferredHeight(10.dp)) Image(asset = image, modifier = imageModifier, contentScale = ContentScale.Crop) } }
Spacer
控件是用來填充空白的,我們還可以添加Modifier
修飾符來修飾各種控件和組件。具體用法可以參考官方api,例如這里我們可以利用修飾符來添加圖片的圓角。
現(xiàn)在我們在來優(yōu)化一下這個(gè)布局,在文字的左邊加一個(gè)圓形頭像,來看看應(yīng)該怎么添加吧:
val imageHead=Modifier.preferredSize(50.dp) .clip(CircleShape) Column(modifier = Modifier.padding(10.dp)){ Row (verticalAlignment = Alignment.CenterVertically){ Image(asset = image,modifier = imageHead,contentScale = ContentScale.Crop) Spacer(modifier = Modifier.preferredSize(10.dp)) Column { Text(text = "不為往事擾") Text(text = "余生只愿笑") } } Spacer(modifier = Modifier.preferredHeight(10.dp)) Image(asset = image, modifier = imageModifier, contentScale = ContentScale.Crop) }
我們需要將這兩個(gè)文本控件用Column包裹起來,然后在它的上級在用Row包裹,在Row里面添加一個(gè)Image控件,利用修飾符來對Image進(jìn)行裁剪,使其變成圓形。來看看效果吧。
三.滑動(dòng)組件
1.ScrollableRow和ScrollableColumn
使用 ScrollableRow
或 ScrollableColumn
可使 Row
或 Column
內(nèi)的元素滾動(dòng)。
@Composable fun ScollableWidget() { ScrollableColumn(Modifier.fillMaxSize()) { for (i in 1..10) { WidgetGroup() } } }
如果要顯示的元素很少,這種方法效果很好,但對于大型數(shù)據(jù)集,很快就會(huì)出現(xiàn)性能問題。如需僅顯示屏幕上可見的部分元素,請使用 LazyColumnFor
或 LazyRowFor
。
2.LazyRowFor和LazyColumnFor
與 RecyclerView
類似,LazyColumnFor
和 LazyRowFor
不會(huì)布置或呈現(xiàn)屏幕外的任何可組合項(xiàng)。使用方式也很簡單,也不需要適配器,直接調(diào)用方法即可,可以設(shè)置數(shù)據(jù),以及修飾符等等
LazyColumnFor(items = getUsers()) { WidgetGroup(it.userName) } LazyRowFor(items = getUsers()) { WidgetGroup(it.userName) }
可以看一下其需要傳入的參數(shù),有數(shù)據(jù)源,修飾符,padding,以及Alignment,大部分都是用來調(diào)整頁面樣式的,最后一個(gè)是用來聲明單個(gè)item的樣式布局。當(dāng)然如果我們想使用不同的item布局的話只需要在聲明item樣式的時(shí)候新增判斷就可以了。
@Composable fun <T> LazyColumnFor( items: List<T>, //用來填充列表的數(shù)據(jù)源 modifier: Modifier = Modifier, //用來修飾列表的樣式 state: LazyListState = rememberLazyListState(), contentPadding: PaddingValues = PaddingValues(0.dp), //用來設(shè)置item之間的間距 horizontalAlignment: Alignment.Horizontal = Alignment.Start,//用來設(shè)置對齊位置 itemContent: @Composable LazyItemScope.(T) -> Unit //用來聲明item樣式布局 )
到此這篇關(guān)于Jetpack Compose布局的使用詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Jetpack Compose布局內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Flutter 控制屏幕旋轉(zhuǎn)的實(shí)現(xiàn)
這篇文章主要介紹了Flutter 控制屏幕旋轉(zhuǎn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Unity3D游戲引擎實(shí)現(xiàn)在Android中打開WebView的實(shí)例
這篇文章主要介紹了Unity3D游戲引擎在Android中打開WebView的實(shí)例,需要的朋友可以參考下2014-07-07Android網(wǎng)絡(luò)編程之獲取網(wǎng)絡(luò)上的Json數(shù)據(jù)實(shí)例
這篇文章主要介紹了Android網(wǎng)絡(luò)編程之獲取網(wǎng)絡(luò)上的Json數(shù)據(jù)實(shí)例,本文用完整的代碼實(shí)例講解了在Android中讀取網(wǎng)絡(luò)中Json數(shù)據(jù)的方法,需要的朋友可以參考下2014-10-10Android中WebView加載的網(wǎng)頁被放大的解決辦法
這篇文章主要介紹了Android中WebView加載的網(wǎng)頁被放大的問題的解決辦法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2016-12-12Android自定義ViewPagerIndicator實(shí)現(xiàn)炫酷導(dǎo)航欄指示器(ViewPager+Fragment)
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewPagerIndicator實(shí)現(xiàn)炫酷導(dǎo)航欄指示器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02Android 實(shí)現(xiàn)全屏顯示的幾種方法整理
這篇文章主要介紹了Android 實(shí)現(xiàn)全屏顯示的幾種方法整理的相關(guān)資料,需要的朋友可以參考下2017-03-03Android橫豎屏切換及其對應(yīng)布局加載問題詳解
這篇文章主要為大家詳細(xì)介紹了Android橫豎屏切換及其對應(yīng)布局加載問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04Flutter實(shí)現(xiàn)購物車功能(代碼+邏輯)
本文主要介紹了Flutter實(shí)現(xiàn)購物車功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03