Jetpack Compose布局的使用詳細(xì)介紹
一.標(biāo)準(zhǔn)布局組件
Compose中可以將多個(gè)控件元素組合使用,例如下面這樣,
@Composable
fun WidgetGroup() {
Text(text = "不為往事擾")
Text(text = "余生只愿笑")
}
但是我們會(huì)發(fā)現(xiàn),如果僅僅是這樣,兩個(gè)文本控件會(huì)重疊在一起,類(lèi)似于下面這種樣式:

如果我們想將多個(gè)控件垂直擺放在一起,可以在控件外層添加Column:組件
@Composable
fun WidgetGroup() {
Column {
Text(text = "不為往事擾")
Text(text = "余生只愿笑")
}
}

如果想要水平擺放在頁(yè)面上可以使用 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控件是用來(lái)填充空白的,我們還可以添加Modifier修飾符來(lái)修飾各種控件和組件。具體用法可以參考官方api,例如這里我們可以利用修飾符來(lái)添加圖片的圓角。

現(xiàn)在我們?cè)趤?lái)優(yōu)化一下這個(gè)布局,在文字的左邊加一個(gè)圓形頭像,來(lái)看看應(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包裹起來(lái),然后在它的上級(jí)在用Row包裹,在Row里面添加一個(gè)Image控件,利用修飾符來(lái)對(duì)Image進(jìn)行裁剪,使其變成圓形。來(lái)看看效果吧。

三.滑動(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()
}
}
}
如果要顯示的元素很少,這種方法效果很好,但對(duì)于大型數(shù)據(jù)集,很快就會(huì)出現(xiàn)性能問(wèn)題。如需僅顯示屏幕上可見(jiàn)的部分元素,請(qǐng)使用 LazyColumnFor 或 LazyRowFor。
2.LazyRowFor和LazyColumnFor
與 RecyclerView類(lèi)似,LazyColumnFor和 LazyRowFor不會(huì)布置或呈現(xiàn)屏幕外的任何可組合項(xiàng)。使用方式也很簡(jiǎn)單,也不需要適配器,直接調(diào)用方法即可,可以設(shè)置數(shù)據(jù),以及修飾符等等
LazyColumnFor(items = getUsers()) {
WidgetGroup(it.userName)
}
LazyRowFor(items = getUsers()) {
WidgetGroup(it.userName)
}
可以看一下其需要傳入的參數(shù),有數(shù)據(jù)源,修飾符,padding,以及Alignment,大部分都是用來(lái)調(diào)整頁(yè)面樣式的,最后一個(gè)是用來(lái)聲明單個(gè)item的樣式布局。當(dāng)然如果我們想使用不同的item布局的話(huà)只需要在聲明item樣式的時(shí)候新增判斷就可以了。
@Composable
fun <T> LazyColumnFor(
items: List<T>, //用來(lái)填充列表的數(shù)據(jù)源
modifier: Modifier = Modifier, //用來(lái)修飾列表的樣式
state: LazyListState = rememberLazyListState(),
contentPadding: PaddingValues = PaddingValues(0.dp), //用來(lái)設(shè)置item之間的間距
horizontalAlignment: Alignment.Horizontal = Alignment.Start,//用來(lái)設(shè)置對(duì)齊位置
itemContent: @Composable LazyItemScope.(T) -> Unit //用來(lái)聲明item樣式布局
)
到此這篇關(guān)于Jetpack Compose布局的使用詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Jetpack Compose布局內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
android端實(shí)現(xiàn)驗(yàn)證碼隨機(jī)生成功能
這篇文章主要為大家詳細(xì)介紹了android端實(shí)現(xiàn)驗(yàn)證碼隨機(jī)生成功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
Android中EditText光標(biāo)在4.0中的bug及解決方法
這篇文章主要介紹了Android中EditText光標(biāo)在4.0中的bug及解決方法,簡(jiǎn)單分析了Android4.0版本中EditText光標(biāo)消息的原因及相應(yīng)的解決方法,需要的朋友可以參考下2016-01-01
android中圖片翻頁(yè)效果簡(jiǎn)單的實(shí)現(xiàn)方法
android中圖片翻頁(yè)效果簡(jiǎn)單的實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-05-05
Android懸浮窗屏蔽懸浮窗外部所有的點(diǎn)擊事件的實(shí)例代碼
這篇文章主要介紹了Android懸浮窗屏蔽懸浮窗外部所有的點(diǎn)擊事件實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03
Android實(shí)現(xiàn)仿魅族日歷首頁(yè)功能
這篇文章主要介紹了Android實(shí)現(xiàn)仿魅族日歷首頁(yè)功能的實(shí)現(xiàn)過(guò)程以及相關(guān)代碼講解分享,對(duì)此有興趣的朋友參考下。2018-02-02
Flutter中數(shù)據(jù)存儲(chǔ)的四種方式小結(jié)
在 Flutter 中,存儲(chǔ)是指用于本地和遠(yuǎn)程存儲(chǔ)和管理數(shù)據(jù)的機(jī)制,本給大家介紹了Flutter中不同存儲(chǔ)選項(xiàng)的概述和示例,通過(guò)代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2023-11-11

