观心静

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

前言

  FlowColumn与FlowRow是Jetpack提供的辅助库accompanist的一员,以提供那些在Jetpack Compose sdk中目前还没有的功能API。因为默认库中的Column、Row、LazyVerticalGrid、LazyHorizontalGrid都无法满足流瀑布布局的需求,而且类似这种网格布局LazyVerticalGrid、LazyHorizontalGrid还有无法禁用滚动的问题。所以Jetpack通过辅助库accompanist提供了FlowColumn与FlowRow。

依赖

//流瀑布
implementation "com.google.accompanist:accompanist-flowlayout:0.28.0"

FlowColumn瀑布流效果

代码

@Preview(widthDp = 1280, heightDp = 720)
@Composable
fun textList() {
    FlowColumn(
        modifier = Modifier
            .fillMaxSize()
            .padding(15.dp)
        ,
        mainAxisSpacing = 8.dp,
        crossAxisSpacing = 8.dp
    ) {
        repeat(30) {
            Text(
                text = it.toString(),
                fontSize = 30.sp,
                textAlign = TextAlign.Center,
                color = Color.Black,
                modifier = Modifier
                    .padding(10.dp)
                    .width(100.dp)
                    .height((50..150).random().dp)//高度使用了随机值,模拟瀑布流效果
                    .background(color = Color.LightGray)
            )
        }
    }
}

效果图

FlowRow瀑布流效果

代码:

@Preview(widthDp = 1280, heightDp = 720)
@Composable
fun textList() {
    FlowRow(
        modifier = Modifier
            .fillMaxSize()
            .padding(15.dp)
        ,
        mainAxisSpacing = 8.dp,
        crossAxisSpacing = 8.dp
    ) {
        repeat(30) {
            Text(
                text = it.toString(),
                fontSize = 30.sp,
                textAlign = TextAlign.Center,
                color = Color.Black,
                modifier = Modifier
                    .padding(10.dp)
                    .width((50..150).random().dp)//宽度度使用了随机值,模拟瀑布流效果
                    .height(100.dp)
                    .background(color = Color.LightGray)
            )
        }
    }
}

效果图

FlowColumn的滚动

添加了horizontalScroll才会有滚动效果

代码

@Preview(widthDp = 1280, heightDp = 720)
@Composable
fun textList() {
    FlowColumn(
        modifier = Modifier
            //FlowColumn一定是使用horizontalScroll横向滚动才有item填充满的效果
            .horizontalScroll(rememberScrollState()) 
            .fillMaxSize()
            .padding(15.dp)
        ,
        mainAxisSpacing = 8.dp,
        crossAxisSpacing = 8.dp
    ) {
        repeat(150) {
            Text(
                text = it.toString(),
                fontSize = 30.sp,
                textAlign = TextAlign.Center,
                color = Color.Black,
                modifier = Modifier
                    .padding(10.dp)
                    .width(100.dp)
                    .height(100.dp)
                    .background(color = Color.LightGray)
            )
        }
    }
}

效果图

FlowRow的滚动

代码

@Preview(widthDp = 1280, heightDp = 720)
@Composable
fun textList() {
    FlowRow(
        modifier = Modifier
            //FlowRow一定是使用verticalScroll横向滚动才有item填充满的效果
            .verticalScroll(rememberScrollState())
            .fillMaxSize()
            .padding(15.dp)
        ,
        mainAxisSpacing = 8.dp,
        crossAxisSpacing = 8.dp
    ) {
        repeat(150) {
            Text(
                text = it.toString(),
                fontSize = 30.sp,
                textAlign = TextAlign.Center,
                color = Color.Black,
                modifier = Modifier
                    .padding(10.dp)
                    .width(100.dp)
                    .height(100.dp)
                    .background(color = Color.LightGray)
            )
        }
    }
}

效果图

参数解释

FlowColumn:   main 表示垂直方向,cross 表示水平方向。

FlowRow:   main 表示水平方向,cross 表示垂直方向。

mainAxisSize

 

mainAxisAlignment: 排列起始方向

FlowMainAxisAlignment.Start

FlowMainAxisAlignment.Center

FlowMainAxisAlignment.End

FlowMainAxisAlignment.SpaceEvenly  

放置子节点,使它们在主轴上的间隔均匀,包括第一个子节点之前和最后一个子节点之后的空闲空间。

FlowMainAxisAlignment.SpaceBetween

放置子节点,使它们在主轴上均匀地间隔,在第一个子节点之前或最后一个子节点之后没有空闲空间。

FlowMainAxisAlignment.SpaceAround

放置子节点,使它们在主轴上均匀间隔,包括第一个子节点之前和最后一个子节点之后的空闲空间,但在两个连续的子节点之间存在一半的空间。

mainAxisSpacing 当前方向主轴间距

crossAxisAlignment

 

crossAxisSpacing

十字轴间距,说白了就是FlowColumn与FlowRow另一个方向的间距

lastLineMainAxisAlignment

 

 

End

posted on 2023-04-01 13:59  观心静  阅读(1624)  评论(0编辑  收藏  举报