Compose Column控件讲解并且实现一个淘宝商品item的效果

简介: Compose Column控件讲解并且实现一个淘宝商品item的效果

前情提要


本篇文章主要对 Compose 中的 Column 进行使用解析,文章结束会使用 Column 和 Row 配合实现一个淘宝商品 Item 的效果,

最终效果预览:

image.png

如果您对 Column 的用法比较娴熟,可以直接看最后一节的内容


Column 简单说明


Column 对应于我们开发中的 LinearLayout.vertical,可以垂直的摆放内部控件

因为 Row 和 Column 是想通的,只不过 Column 是垂直方向布局的,而 Row 是水平方向布局。所以讲完了 Column 你只需要把例子代码中的 Column 换成 Row 就可以自行查看 Row 的效果了


Column 参数介绍


modifier

用来定义 Column 的各种属性,比如可以定义宽度、高度、背景等

  1. 示例代码
    设置 modifier 的时候可以链式调用
@Composable
fun DefaultPreview() {
    Column(modifier = Modifier
        .width(300.dp)
        .height(200.dp)
        .background(color = Color.Green)) {
    }
}
复制代码


  1. 实现效果

展示了一个绿色填充的矩形

image.png


verticalArrangement

实现内部元素的竖直对齐效果

关于 verticalArrangement 我们的示例代码如下

后面介绍每种效果的时候会更改 verticalArrangement 的值进行展示

Row() {
        Spacer(modifier = Modifier.width(100.dp))
        Column(
            modifier = Modifier
                .width(50.dp)
                .height(200.dp)
                .background(color = Color.Green),
//            verticalArrangement = Arrangement.SpaceAround
        ) {
            Image(modifier = Modifier.size(20.dp),painter = painterResource(id = R.drawable.apple), contentDescription = null)
            Image(modifier = Modifier.size(20.dp),painter = painterResource(id = R.drawable.apple), contentDescription = null)
            Image(modifier = Modifier.size(20.dp),painter = painterResource(id = R.drawable.apple), contentDescription = null)
            Image(modifier = Modifier.size(20.dp),painter = painterResource(id = R.drawable.apple), contentDescription = null)
        }
    }
复制代码


不设置该属性的效果
  1. 效果
    image.png
  2. 结论
    不设置该属性的时候,内部元素贴着顶部紧凑排列


Arrangement.Center
  1. 效果

image.png

  1. 结论
    所有元素垂直居中,紧凑排列

Arrangement.SpaceBetween
  1. 效果

image.png

  1. 结论
    元素之间均分空间,与顶部和底部之间无间距


SpaceAround 效果
  1. 效果

image.png

  1. 结论
    内部元素等分空间,并且顶部和底部留间距(顶部元素距离顶部的距离和底部元素距离底部的距离与元素等分的长度不一致)


Arrangement.SpaceEvenly
  1. 效果

image.png

  1. 结论
    所有元素均分空间(顶部元素距离顶部的距离和底部元素距离底部的距离与元素等分的长度一致)


Arrangement.Bottom
  1. 效果

image.png

  1. 结论
    所有元素靠近底部,紧凑排列


Arrangement.spacedBy(*.dp)

可以设置元素间的等分距离

比如我们设置 20dp,Arrangement.spacedBy(20.dp)

  1. 效果

image.png

  1. 结论

元素之间距离为 20dp,靠近顶部排列


horizontalAlignment

实现 Column 的水平约束


Alignment.Start 居开始的位置对齐
  1. 效果

image.png

  1. 结论
    当前模拟器 Start 就是 Right,所以内部元素居左侧对齐


Alignment.CenterHorizontally 水平居中
  1. 效果
    image.png
  2. 结论
    内部元素水平居中对齐


Alignment.End
  1. 效果

image.png

  1. 结论
    当前模拟器 End 就是 Left,所以内部元素居右侧对齐

content

关于这个属性,注释中都没写他我也就先不研究了

image.png


使用 Column 实现淘宝商品 item 布局


  1. 本例中目标效果图如下

image.png


  1. 代码
@Composable
fun DefaultPreview2() {
    Row(
        modifier = Modifier.fillMaxSize(1f).background(color= Color.Gray),
        verticalAlignment = Alignment.CenterVertically,
        horizontalArrangement = Arrangement.Center
    ) {
        Column(
            modifier = Modifier
                .width(200.dp)
                .background(color = Color.White)
                .padding(all = 10.dp)
        ) {
            Image(
                painter = painterResource(id = R.drawable.apple),
                contentDescription = null,
                modifier = Modifier.size(180.dp).clip(RoundedCornerShape(10.dp))
            )
            Text(
                text = "当天发,不要钱",
                fontSize = 20.sp,
                style = TextStyle(fontWeight = FontWeight.Bold),
                modifier = Modifier.padding(vertical = 2.dp)
            )
            Row(
                modifier = Modifier.padding(vertical = 2.dp),
                verticalAlignment = Alignment.CenterVertically
            ) {
                Text(
                    text = "¥说了不要钱",
                    fontSize = 14.sp,
                    color = Color(0xff9f8722)
                )
                Text(text = "23人免费拿", fontSize = 12.sp)
            }
            Row(
                modifier = Modifier
                    .width(200.dp)
                    .fillMaxWidth()
                    .padding(vertical = 2.dp),
                verticalAlignment = Alignment.CenterVertically
            ) {
                Text(text = "不要钱")
                Spacer(modifier = Modifier.weight(1f))//通过设置weight让Spacer把Row撑开,实现后面的图片居右对齐的效果
                Image(
                    painter = painterResource(id = android.R.drawable.btn_star_big_on),
                    contentDescription = null,
                )
            }
        }
    }
}
复制代码


  1. 实现说明

本商品 item 分为四部分:

第一部分:图片,我们使用 Image 实现

第二部分:商品描述,使用一个 Text

第三部分:价格,使用 Row 套两个 Text 实现

第四部分:分期情况,使用 Row 套一个 Text 和 Image 完成,注意因为图片要居右对齐,所以中间需要使用一个 Spacer 挤满剩余宽度。


淘宝商品 item 实现要点


  1. 我们可以使用 modifier = Modifier .width(200.dp) 设置 Column 的宽度
  2. Modifier.padding(all = 10.dp)可以设置四个方向的内边距
  3. modifier = Modifier.size(180.dp).clip(RoundedCornerShape(10.dp)可以设置圆角,因为本例中图片背景和控件背景都是白色,所以看不出来效果
  4. 最底部的控件需要让收藏按钮贴近父控件右侧对齐,使用 Modifier.weight 实现: Spacer(modifier = Modifier.weight(1f))



相关文章
|
5月前
|
供应链 搜索推荐 数据挖掘
拼多多根据ID取商品详情原数据 API (pinduoduo.item_get_app_pro)在电商中的应用
拼多多是一个非常受欢迎的电商平台,它提供了许多API接口来帮助开发者集成和扩展其功能。其中,pinduoduo.item_get_app_pro API接口是用于根据商品ID获取商品详情的。这个API接口在电商应用中具有广泛的应用场景,以下是几个例子: 个性化推荐:电商平台可以根据用户的浏览和购买历史,利用pinduoduo.item_get_app_pro API接口获取商品的详细信息,然后向用户推荐相似或相关的商品。这有助于提高用户的购物体验,增加用户的购买意愿。 库存管理:商家可以利用这个API接口实时查询商品库存情况,以便及时调整销售策略,避免库存积压或缺货。 商品详情页面优化:在商
|
5月前
|
监控 数据挖掘 定位技术
Spartacus 测试,后台修改 product price 数据后,添加到 Cart 时,会带出来最新的价格吗
Spartacus 测试,后台修改 product price 数据后,添加到 Cart 时,会带出来最新的价格吗
|
5月前
使用Vant框架的组件van-pull-refresh搭配van-list和van-card完成上滑加载更多列表数据,下拉刷新当前列表数据(等同于翻页功能)
使用Vant框架的组件van-pull-refresh搭配van-list和van-card完成上滑加载更多列表数据,下拉刷新当前列表数据(等同于翻页功能)
|
5月前
|
API 开发工具 开发者
淘宝店铺所有商品数据接口(Taobao.item_search_shop)
淘宝店铺所有商品数据接口(Taobao.item_search_shop)
|
10月前
|
数据采集 数据挖掘 API
如何使用item_get接口获取不同类别的商品信息?
在电商行业中,商品类别是进行商品组织和管理的关键要素。通过商品类别,我们可以对商品进行分类、筛选和比较,以便更好地了解市场需求和消费者行为。本文将介绍如何使用item_get接口获取不同类别的商品信息,以及如何对这些信息进行数据分析和挖掘。
|
10月前
|
搜索推荐 数据挖掘 API
如何结合其他电商API接口,如item_search、item_recommend等,以实现更丰富的电商应用场景?
item_search接口是电商平台提供的搜索接口,可以帮助开发者实现商品信息的搜索和筛选。通过调用item_search接口,我们可以根据用户输入的关键词或短语,搜索并返回与搜索词匹配的商品列表。
|
11月前
|
测试技术 API 微服务
谷粒商城--SPU和SKU(分组与属性关联、发布商品、仓库服务)-3
谷粒商城--SPU和SKU(分组与属性关联、发布商品、仓库服务)
59 0
|
11月前
|
JSON 前端开发 Java
谷粒商城--SPU和SKU(分组与属性关联、发布商品、仓库服务)-2
谷粒商城--SPU和SKU(分组与属性关联、发布商品、仓库服务)
76 0
|
11月前
|
JSON 数据格式
谷粒商城--SPU和SKU(分组与属性关联、发布商品、仓库服务)-1
谷粒商城--SPU和SKU(分组与属性关联、发布商品、仓库服务)
50 0
|
11月前
|
SQL 前端开发 测试技术
谷粒商城--SPU和SKU(属性分组、规格参数、销售属性)-1
谷粒商城--SPU和SKU(属性分组、规格参数、销售属性)
184 0