android开发中的 AndroidX 版本的查看 及 constraintLayout的简单用法

1、查看库的版本

平常我们经常会用到一些库,但是不知道是什么版本,也不知道最新的是什么版本,当然最好的就是到官网去查看,或者三方的maven库。

2、官方地址

AndroidX 版本  |  Jetpack  |  Android Developers

3、比如我们来看一下constraintlayout

4、引入到项目libs

androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout-compose", version.ref = "constraintLayout" }constraintLayout = "1.1.1"

5、引入项目

implementation(libs.androidx.constraintlayout)

6、写个demo

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dpimport android.util.Log
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.TextFieldValue
import androidx.constraintlayout.compose.ConstraintLayout
import androidx.constraintlayout.compose.Dimension
import kotlinx.coroutines.launch@Composable
fun SalesScreen() {val scope = rememberCoroutineScope()val context = LocalContext.currentvar selectedCategoryId by remember { mutableStateOf(0L) }var searchText by remember { mutableStateOf(TextFieldValue("")) }// 模拟分类数据val categories = listOf(Category(1, "饮料"),Category(2, "零食"),Category(3, "日用品"))// 模拟商品数据val goodsList = remember(selectedCategoryId, searchText) {getGoodsByCategoryAndSearch(selectedCategoryId, searchText.text)}ConstraintLayout(modifier = Modifier.fillMaxSize()) {val (categoryList, goodsHeader, goodsListSection) = createRefs()// 左侧分类列表LazyColumn(modifier = Modifier.constrainAs(categoryList) {start.linkTo(parent.start)top.linkTo(parent.top)bottom.linkTo(parent.bottom)width = Dimension.percent(0.3f)}.padding(8.dp)) {items(categories) { category ->CategoryItem(category = category,isSelected = category.id == selectedCategoryId,onClick = {selectedCategoryId = category.id})}}// 右侧商品搜索栏TextField(value = searchText,onValueChange = { searchText = it },label = { Text("搜索商品") },modifier = Modifier.constrainAs(goodsHeader) {start.linkTo(categoryList.end)end.linkTo(parent.end)top.linkTo(parent.top)width = Dimension.fillToConstraints}.padding(8.dp))// 右侧商品列表LazyColumn(modifier = Modifier.constrainAs(goodsListSection) {start.linkTo(categoryList.end)top.linkTo(goodsHeader.bottom)end.linkTo(parent.end)bottom.linkTo(parent.bottom)width = Dimension.percent(0.7f)}.padding(8.dp)) {items(goodsList) { good ->GoodItem(good = good)}}}
}// 分类数据类
data class Category(val id: Long, val name: String)// 商品数据类
data class Good(val id: Long, val name: String, val price: Double)// 分类项组件
@Composable
fun CategoryItem(category: Category, isSelected: Boolean, onClick: () -> Unit) {Card(modifier = Modifier.fillMaxWidth().padding(4.dp).clickable { onClick() },colors = if (isSelected) CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.primaryContainer)else CardDefaults.cardColors()) {Text(text = category.name,modifier = Modifier.padding(12.dp))}
}// 商品项组件
@Composable
fun GoodItem(good: Good) {Card(modifier = Modifier.fillMaxWidth().padding(4.dp)) {Row(modifier = Modifier.padding(12.dp)) {Text(text = good.name, style = MaterialTheme.typography.titleMedium)Spacer(modifier = Modifier.weight(1f))Text(text = "¥${good.price}", style = MaterialTheme.typography.titleSmall)}}
}// 模拟根据分类和搜索条件获取商品列表
fun getGoodsByCategoryAndSearch(categoryId: Long, query: String): List<Good> {// 假设原始数据val allGoods = mapOf(1L to listOf(Good(1, "可乐", 3.5),Good(2, "雪碧", 3.5),Good(3, "矿泉水", 2.0)),2L to listOf(Good(4, "薯片", 5.0),Good(5, "巧克力", 8.0),Good(6, "饼干", 4.5)),3L to listOf(Good(7, "牙膏", 9.9),Good(8, "洗发水", 19.9),Good(9, "纸巾", 5.0)))return allGoods[categoryId]?.filter {it.name.contains(query, ignoreCase = true)} ?: emptyList()
}

7、demo运行截图

demo运行的效果,还是不错的,点击左侧,能显示右侧的列表,相当可以。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87607.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle锁表,oracle解锁表,oracle用户连接数

一、查看被锁的表 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sess where ao.object_id lo.object_id and lo.session_id sess.sid; 二、解锁表语句 alter …

3D可视化:开启多维洞察新时代

3D可视化技术以一种前所未有的方式&#xff0c;将数据、模型与现实世界紧密相连&#xff0c;为人们带来了沉浸式、交互式的全新体验&#xff0c;彻底革新了信息的呈现与理解方式。一、3D可视化的技术原理从技术本质来看&#xff0c;3D可视化基于一系列复杂而精妙的原理。通过数…

List中的对象进行排序处理

以下是使用 Java Stream 对对象列表按 id 和 age 排序的完整示例&#xff0c;包含升序和降序两种场景&#xff1a; 1. 定义测试对象类 Getter Setter public class Person {private int id;private int age; }2. 排序实现代码 import java.util.*; import java.util.stream.…

秋招Day14 - Redis - 底层结构

Redis都有哪些底层数据结构&#xff1f; 有八种核心的底层数据结构。 SDS Redis自己实现的动态字符串&#xff0c;SDS结构中直接存储了已使用的字符数组长度len和未使用的字符数组长度free&#xff0c;所以获取长度的时间复杂度是O(1)&#xff0c;还支持动态扩容&#xff0c…

使用Mac自带的图像捕捉导出 iPhone 相册

用 数据线 将 iPhone 连接到 Mac必须是数据线,有些充电线插上去后无法识别到iphone在 iPhone 上点击“信任此电脑”在 Mac 上打开应用&#xff1a;快速方式&#xff1a;按 Command Space 打开 Spotlight&#xff0c;输入 图像捕捉 或 Image Capture&#xff0c;回车或者从 /系…

【UniApp picker-view 多列对齐问题深度剖析与完美解决】

UniApp picker-view 多列对齐问题深度剖析与完美解决一次看似简单的样式调整&#xff0c;却引发了对构建工具、CSS 预处理和组件渲染机制的深度思考创作时间: 2025/7/1 技术栈: UniApp Vue3 TypeScript PostCSS 问题级别: &#x1f534; 高级&#x1f3af; 问题背景 在开发 …

R Studio开发中记录

1.如何将tar.gz格式的源码R包编译为zip格式的二进制R包。 R CMD INSTALL --build knhanes.tar.gz R CMD INSTALL --build nhanes.tar.gz 2.下载RTools RTools: Toolchains for building R and R packages from source on Windows 3.修改环境变量 PATH$PATH:/d/rtools45/usr…

量化交易中的隐藏模式识别:基于潜在高斯混合模型的机会挖掘

*——从市场噪声中提取黄金信号的数学艺术** > 2025年3月,某对冲基金使用潜在高斯混合模型捕捉到铜期货的异常波动模式,提前布局实现单月收益47%。核心代码仅20行,却颠覆了传统技术分析范式。 --- ### 01 市场迷思:为何90%的交易者失败? 金融市场本质是**非…

Qt窗口被外部(非Qt内部机制)强制销毁,第二次再重复使用不显示

在Qt开发中&#xff0c;窗口被外部&#xff08;非Qt内部机制&#xff09;强制销毁 警告信息 External WM_DESTROY received for QWidgetWindow(0x108b8cbdb10, name"xxxxx") , parent: QWindow(0x0) , transient parent: QWindow(0x0) 使用场景 代码结构如下&#x…

一文详解Character AI:实用指南+ ChatGPT、Gemini对比分析

本指南将深入剖析Character AI的运行机制、功能特性及其存在的局限性。 近年来&#xff0c;生成式人工智能领域发展态势迅猛&#xff0c;其应用范畴已远超单纯的文本生成领域。在众多备受瞩目的新兴平台中&#xff0c;Character AI是一款支持用户以对话形式与人工智能生成角色…

遗传算法的原理与实现示例

遗传算法是一种受生物进化理论启发的随机优化算法&#xff0c;其核心思想是模拟自然界中 “物竞天择、适者生存” 的进化过程&#xff0c;通过对候选解的迭代优化&#xff0c;找到问题的最优解。 一、核心思想 遗传算法将优化问题的候选解视为生物群体中的“个体”&#xff0c…

centos7 ping127.0.0.1不通

ping 127.0.0.1&#xff0c;localhost和本地ip都不通&#xff0c;所有的配置也是正确的 检查下是否禁止了ping vim /proc/sys/net/ipv4/icmp_echo_ignore_all 内容为 1 禁止ping 内容为0 开启ping sysctl -w net.ipv4.icmp_echo_ignore_all0 变更以上设置即可

【无标题】JavaScript入门

JS 1.JS引入方式 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JS-引入方式</title><!-- …

(JAVA)自建应用调用企业微信API接口,实现消息推送

建议先简单了解企业微信开发者中心文档&#xff1a;开发前必读 - 文档 - 企业微信开发者中心 了解一下企业微信调用接口的基础参数&#xff1a;基本概念介绍 - 文档 - 企业微信开发者中心 本篇每个步骤都会跟着官网文档走&#xff0c;都会贴上相关链接&#xff0c;看完本篇文…

P/Invoke 在默认封送(marshalling)规则下,常见托管 ⇄ 非托管类型的对应关系

下表整理了 P/Invoke 在默认封送&#xff08;marshalling&#xff09;规则下&#xff0c;常见托管 ⇄ 非托管类型的对应关系。 内容主要依据微软官方 Marshalling Data with Platform Invoke 文档&#xff0c;并补充了常见指针&#xff0f;句柄用法与字符串缓冲区&#xff…

2.isaacsim4.2 教程-初识OmniGraph

1. OmniGraph&#xff08;视觉编程&#xff09; OmniGraph 是 Omniverse 的可视化编程框架。它提供了一个图状结构&#xff0c;将 Omniverse 内多个系统的功能节点串联起来&#xff1b;同时也是一个计算框架&#xff0c;允许你编写高度自定义的节点&#xff0c;将自己的功能无…

MonoGame 游戏开发框架日记 -03

第三章&#xff1a;创建类库 内容介绍 主要内容&#xff1a;创建Core类并编写 创建这个类主要是为了后续开发方便&#xff0c;并介绍游戏开发中的一种非常重要编程模式 单例模式&#xff0c;以及了解MonoGame基本图形渲染知识单例模式&#xff1a; 第一步我们得先了解什么是单例…

AES 256 CBC加密和解密

AES-256-CBC 是一种对称加密算法&#xff0c;使用 256位密钥 和 CBC&#xff08;Cipher Block Chaining&#xff09;模式。它的典型使用场景包括对敏感信息进行加密存储或传输。下面是 AES-256-CBC 的加密与解密的 Python 示例&#xff0c;使用 pycryptodome 库&#xff1a; &a…

Git 版本控制完全指南:从入门到精通

Git 版本控制完全指南&#xff1a;从入门到精通 作为当今最流行的分布式版本控制系统&#xff0c;Git 已经成为开发者必备的技能之一。无论你是独立开发者还是团队协作&#xff0c;Git 都能帮助你高效管理代码版本。本文将带你从零开始&#xff0c;逐步掌握 Git 的核心概念和常…

408第三季part2 - 计算机网络 - 计算机网络分层结构

理解 PCI会放一些控制信息&#xff0c;源地址目的地址都在里面 SDU是放的数据 整个加起来是PDU 每一层的SDU都是上一层的PDU 看一看 也是简单看一看就行 网络层有时候也叫IP数据报 这里断点下载的意思就是&#xff0c;你下载东西的时候网络断了&#xff0c;再连回来的时候会接…