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天前
|
JSON 安全 API
微店item_search_shop-获得店铺的所有商品API接口设计指南
本文介绍如何设计高效、安全且易用的item_search_shop API接口,用于微店商品检索和管理。关键需求包括数据完整性、高并发支持、安全性及易用性。开发者需在微店开放平台注册获取API凭证,并通过Access Token调用接口。接口支持一次性获取店铺所有商品信息,提供Python示例代码。注意事项涵盖凭证安全、异常处理和数据准确性。此API助力商家提升电商运营效率。
|
17天前
|
安全 API 数据安全/隐私保护
淘宝店铺所有商品数据接口(Taobao.item_search_shop)
淘宝开放平台提供的 `Taobao.item_search_shop` 接口用于获取指定淘宝店铺的所有商品数据。请求参数包括 `seller_id`(必需)、`page`(可选,默认为1)和 `sort`(可选,排序方式如新品、价格、销量)。响应参数包括商品的唯一标识符、主图URL、标题、价格、销量等。使用步骤包括注册账号、创建应用、获取权限、构建请求、分页获取商品列表和获取商品详细信息。注意遵守调用频率限制和相关法律法规。
|
18天前
|
机器学习/深度学习 JSON API
淘宝图片搜索接口(Taobao.item_search_img)
淘宝图片搜索接口(Taobao.item_search_img)允许开发者通过上传商品图片或提供图片地址,获取相似的淘宝商品列表。该接口基于深度学习和计算机视觉技术,支持注册账号、申请权限、构造请求参数、调用接口、解析响应数据等步骤。适用于电商平台购物体验提升、商家商品优化与推广、商品推荐系统和图片版权保护等场景。
|
3月前
|
API
淘宝API接口( item_detail - 淘宝商品详情查询)
淘宝商品详情查询 API(item_detail)用于获取淘宝商品的详细信息。请求参数包括商品唯一 ID(num_iid)和是否获取促销价(is_promotion)。响应参数包含商品标题、价格、库存、图片链接、品牌等详细信息。
|
8月前
|
供应链 搜索推荐 数据挖掘
拼多多根据ID取商品详情原数据 API (pinduoduo.item_get_app_pro)在电商中的应用
拼多多是一个非常受欢迎的电商平台,它提供了许多API接口来帮助开发者集成和扩展其功能。其中,pinduoduo.item_get_app_pro API接口是用于根据商品ID获取商品详情的。这个API接口在电商应用中具有广泛的应用场景,以下是几个例子: 个性化推荐:电商平台可以根据用户的浏览和购买历史,利用pinduoduo.item_get_app_pro API接口获取商品的详细信息,然后向用户推荐相似或相关的商品。这有助于提高用户的购物体验,增加用户的购买意愿。 库存管理:商家可以利用这个API接口实时查询商品库存情况,以便及时调整销售策略,避免库存积压或缺货。 商品详情页面优化:在商
|
8月前
|
XML JSON API
lazada商品列表数据接口方法(lazada.item_search)
lazada商品列表数据接口方法(lazada.item_search)
|
8月前
|
API 开发工具 开发者
淘宝店铺所有商品数据接口(Taobao.item_search_shop)
淘宝店铺所有商品数据接口(Taobao.item_search_shop)
|
8月前
|
前端开发 搜索推荐 API
按图搜索淘宝商品(拍立淘)接口(Taobao.item_search_img)
按图搜索淘宝商品(拍立淘)接口(Taobao.item_search_img)
|
供应链 API 开发工具
1688店铺所有商品数据接口(1688.item_search_shop)
1688店铺所有商品数据接口(1688.item_search_shop)