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
英文地址,請注明出處:http://en.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;再連回來的時候會接…