Android中Compose常用組件以及布局使用方法

一、基礎控件詳解

1. Text - 文本控件
Text(text = "Hello Compose", // 必填,顯示文本color = Color.Blue,      // 文字顏色fontSize = 24.sp,        // 字體大小(注意使用.sp單位)fontStyle = FontStyle.Italic, // 字體樣式(斜體)fontWeight = FontWeight.Bold, // 字體粗細modifier = Modifier.padding(16.dp)     // 內邊距.background(Color.LightGray) // 背景色
)

核心參數說明

  • text:顯示的文字內容(必填

  • color:文字顏色(Color.Red,?Color(0xFF6200EE)等)

  • fontSize:字體大小(必須使用.sp單位,如18.sp

  • fontWeight:字體粗細(FontWeight.Normal,?Bold,?W800等)

  • modifier:通用修飾符(設置邊距、背景、點擊事件等)

  • maxLines:最大行數(超出顯示省略號)

  • textDecoration:文本裝飾(TextDecoration.Underline下劃線)

效果(示意圖)

[淺灰色背景]Hello Compose(藍色,24sp,粗體,斜體)

2. Button - 按鈕控件
val context = LocalContext.currentButton(onClick = { // 必填,點擊回調Toast.makeText(context, "Clicked!", Toast.LENGTH_SHORT).show()},colors = ButtonDefaults.buttonColors(backgroundColor = Color.Red, // 按鈕背景contentColor = Color.White   // 內容顏色),modifier = Modifier.padding(8.dp),enabled = true // 是否啟用
) {Icon( // 圖標imageVector = Icons.Filled.Favorite,contentDescription = "Like")Spacer(Modifier.width(8.dp)) // 間距Text("Like") // 按鈕文字
}

核心參數說明

  • onClick:點擊事件回調(必填

  • colors:顏色配置(背景色、文字色)

  • enabled:是否啟用(false時變灰色)

  • content:按鈕內容(可包含任意Composable)

效果

[紅色按鈕] ? Like(白色文字)
點擊后彈出Toast

3. TextField - 輸入框控件
var text by remember { mutableStateOf("") } // 關鍵:狀態管理TextField(value = text, // 當前值(綁定狀態)onValueChange = { newText -> // 輸入變化回調text = newText },label = { Text("Username") }, // 浮動標簽placeholder = { Text("Enter your name") }, // 提示文字leadingIcon = { // 前綴圖標Icon(Icons.Filled.Person, null) },keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text, // 鍵盤類型imeAction = ImeAction.Done        // 鍵盤動作),modifier = Modifier.fillMaxWidth()
)

核心參數說明

  • value/onValueChange必須配合狀態管理remember+mutableStateOf

  • label:浮動標簽(輸入時上浮)

  • placeholder:提示文本(未輸入時顯示)

  • keyboardOptions:鍵盤配置(郵箱/數字鍵盤等)

  • singleLine:是否單行(true時禁用換行)


4. Image - 圖片控件
// 加載本地資源
Image(painter = painterResource(R.drawable.dog),contentDescription = "Cute dog", // 必填(無障礙)modifier = Modifier.size(120.dp).clip(CircleShape), // 圓形裁剪contentScale = ContentScale.Crop // 裁剪模式
)// 加載網絡圖片(Coil)
AsyncImage(model = "https://example.com/image.jpg",contentDescription = "Network image",placeholder = { // 加載中顯示CircularProgressIndicator()},error = { // 錯誤顯示Icon(Icons.Filled.Error, null)}
)

核心參數說明

  • painter:本地資源(painterResource()

  • contentDescription必填(無障礙支持)

  • contentScale:縮放模式(Crop,?Fit,?Inside等)

  • alpha:透明度(0.0f-1.0f)

  • colorFilter:顏色濾鏡(如黑白效果)


5. ProgressIndicator - 進度指示器
// 圓形進度條
CircularProgressIndicator(progress = 0.7f, // 進度值(0-1)color = Color.Green,strokeWidth = 8.dp,modifier = Modifier.size(50.dp)
)// 線性進度條
LinearProgressIndicator(progress = 0.4f,backgroundColor = Color.LightGray,color = MaterialTheme.colors.primary,modifier = Modifier.fillMaxWidth().padding(16.dp)
)

參數說明

  • progress:進度值(0-1),不傳則為不確定進度

  • color:進度條顏色

  • strokeWidth:圓形進度條粗細

  • backgroundColor:線性進度條背景色


二、核心布局詳解(附結構圖)

1. Column - 垂直布局
Column(modifier = Modifier.fillMaxSize() // 占滿父布局.background(Color.LightGray),horizontalAlignment = Alignment.CenterHorizontally, // 水平居中verticalArrangement = Arrangement.SpaceEvenly // 等間距分布
) {Text("Item 1")Button(onClick = {}) { Text("Button") }Image(painterResource(R.drawable.icon), null)
}

參數說明

參數說明常用值
horizontalAlignment子項水平對齊Start,?CenterHorizontally,?End
verticalArrangement垂直分布方式Top,?Center,?SpaceBetween,?SpaceEvenly
modifier修飾符設置尺寸/背景/邊距等

布局效果

┌───────────────────────────┐
│                           │
│          Item 1           │
│                           │
│         [ Button ]        │
│                           │
│          [圖標]           │
│                           │
└───────────────────────────┘
(等間距分布)

2. Row - 水平布局
Row(modifier = Modifier.fillMaxWidth().background(Color.LightGray).padding(16.dp).horizontalScroll(rememberScrollState()), // 水平滾動verticalAlignment = Alignment.CenterVertically, // 垂直居中horizontalArrangement = Arrangement.SpaceBetween // 兩端對齊
) {Icon(Icons.Filled.Menu, "Menu")Text("Title", fontWeight = FontWeight.Bold)Icon(Icons.Filled.Search, "Search")
}

參數說明

參數說明常用值
verticalAlignment子項垂直對齊Top,?CenterVertically,?Bottom
horizontalArrangement水平分布方式Start,?Center,?SpaceBetween,?SpaceAround
.horizontalScroll()水平滾動支持必須添加

布局效果

┌─[菜單]─────標題─────[搜索]─┐
(兩端對齊,可橫向滾動)

3. Box - 層疊布局
Box(modifier = Modifier.size(200.dp).background(Color.Blue)
) {Image( // 底層painter = painterResource(R.drawable.bg),contentDescription = "Background",modifier = Modifier.fillMaxSize())Text( // 中層"Overlay Text",color = Color.White,modifier = Modifier.align(Alignment.Center).padding(8.dp))Button( // 頂層onClick = {},modifier = Modifier.align(Alignment.BottomEnd).padding(16.dp)) {Text("Action")}
}

關鍵方法

  • Modifier.align():在Box內定位

    • Alignment.TopStart

    • Alignment.Center

    • Alignment.BottomEnd

  • Modifier.zIndex():控制層級(默認后添加的在上層)

布局效果

┌───────────────────────────┐
│   [背景圖片]              │
│                           │
│        居中文字           │
│                           │
│                   [按鈕]  │
└───────────────────────────┘
(三層疊加)

三、常見問題

Q1:Compose 為什么需要狀態管理?TextField 如何處理狀態變化?

// 狀態聲明
var text by remember { mutableStateOf("") }// 狀態綁定
TextField(value = text, // 綁定狀態值onValueChange = { newText -> text = newText // 更新狀態}
)/*
1. 初始狀態 text = ""
2. 用戶輸入 "A" -> 觸發 onValueChange
3. text 更新為 "A"
4. 狀態變化觸發重組(Recomposition)
5. TextField 根據新值刷新界面
*/
Q2:如何實現列表滾動?

垂直滾動

Column(modifier = Modifier.verticalScroll(rememberScrollState())
) { /* 長內容 */ }

高性能列表(LazyColumn)

LazyColumn {item { Header() }items(100) { index -> // 只渲染可見項ListItem(index)}item { Footer() }
}
Q3:Box 布局如何實現復雜定位?
Box(modifier = Modifier.fillMaxSize()) {// 左上角Text("TopStart", Modifier.align(Alignment.TopStart))// 右上角Button(onClick = {}, Modifier.align(Alignment.TopEnd)) { ... }// 正中央Image(..., Modifier.align(Alignment.Center))// 左下角Icon(..., Modifier.align(Alignment.BottomStart))// 右下角CircularProgressIndicator(Modifier.align(Alignment.BottomEnd))
}
Q4:如何實現響應式布局?
@Composable
fun AdaptiveLayout() {// 根據屏幕寬度選擇布局val configuration = LocalConfiguration.currentval screenWidth = configuration.screenWidthDp.dpif (screenWidth < 600.dp) {VerticalLayout() // 小屏:垂直布局} else {HorizontalLayout() // 大屏:水平布局}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87205.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87205.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87205.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SCI一區黑翅鳶優化算法+三模型光伏功率預測對比!BKA-CNN-GRU、CNN-GRU、GRU三模型多變量時間序列預測

SCI一區黑翅鳶優化算法三模型光伏功率預測對比&#xff01;BKA-CNN-GRU、CNN-GRU、GRU三模型多變量時間序列預測 目錄 SCI一區黑翅鳶優化算法三模型光伏功率預測對比&#xff01;BKA-CNN-GRU、CNN-GRU、GRU三模型多變量時間序列預測效果一覽基本介紹程序設計參考資料 效果一覽 …

創客匠人視角:創始人 IP 打造為何成為知識變現的核心競爭力

在互聯網流量成本高企的當下&#xff0c;知識變現行業正經歷從 “產品競爭” 到 “IP 競爭” 的范式遷移。創客匠人 CEO 老蔣指出&#xff0c;創始人 IP 已成為企業突破增長瓶頸的關鍵支點 —— 美特斯邦威創始人周成建首次直播即創下 1500 萬元成交額&#xff0c;印證了創始人…

類圖+案例+代碼詳解:軟件設計模式----生成器模式(建造者模式)

生成器模式&#xff08;建造者模式&#xff09; 把復雜對象的建造過程和表示分離&#xff0c;讓同樣的建造過程可以創建不同的表示。 假設你去快餐店買漢堡&#xff0c;漢堡由面包、肉餅、蔬菜、醬料等部分組成。 建造者模式的角色類比&#xff1a; 產品&#xff08;Product…

UI前端與數字孿生融合探索:為智慧物流提供可視化解決方案

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在全球供應鏈數字化轉型的浪潮中&#xff0c;智慧物流正從概念走向落地 —— 據 MarketsandMa…

遠程辦公與協作新趨勢:從遠程桌面、VDI到邊緣計算,打造高效、安全的混合辦公環境

一、引言 隨著數字化轉型的加速&#xff0c;越來越多的企業開始采用遠程辦公和混合辦公模式&#xff0c;以提升員工的靈活性和企業的敏捷性。然而&#xff0c;異地辦公也帶來了諸如桌面環境不一致、安全風險增加、溝通協作效率降低等諸多挑戰。因此&#xff0c;如何打造一致、…

算法總結篇:二叉樹

二叉樹解題整體框架&#xff1a; 1、確定當前題型是做高度還是深度還是搜索樹還是其他 高度&#xff08;從下往上&#xff0c;求根深度、高度等&#xff09;&#xff1a; 使用后序遍歷會更加簡單&#xff0c;遞歸方法一般需要返回值返回上級&#xff0c;讓上級對返回值進行判斷…

【Elasticsearch】most_fields、best_fields、cross_fields 的區別與用法

most_fields、best_fields、cross_fields 的區別與用法 1.核心區別概述2.詳細解析與用法2.1 best_fields&#xff08;最佳字段匹配&#xff09;2.2 most_fields&#xff08;多字段匹配&#xff09;2.3 cross_fields&#xff08;跨字段匹配&#xff09; 3.對比案例3.1 使用 best…

力扣網C語言編程題:在數組中查找目標值位置之暴力解法

一. 簡介 本文記錄一下力扣網上涉及數組的問題&#xff1a;排序數組中查找目標值的位置。主要以C語言實現。 二. 力扣網C語言編程題&#xff1a;在數組中查找目標值位置 題目&#xff1a;在排序數組中查找元素的第一個和最后一個位置 給你一個按照非遞減順序排列的整數數組 …

OSCP - Proving Grounds - tre

主要知識點 突破邊界的方法比較多樣觀察pspy64的檢測結果 具體步驟 依舊nmap掃描開始,開放了80,8082,22端口 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-16 03:39 UTC Nmap scan report for 192.168.56.84 Host is up (0.00083s latency). Not shown: 65532 c…

【Mars3d】支持的basemaps數組與layers數組的坐標系列舉

問題場景&#xff1a; basemap 是epsg4326的。&#xff0c;layer 圖層是 epsg 4450的。可以在一個頁面中展示嗎&#xff1f; 回復&#xff1a; 可以不同坐標系疊加&#xff0c;但layer 圖層是 epsg 4450的只支持arcgis動態服務&#xff0c;其他情況的不支持 wmts只支持3個坐標…

【算法】509. 斐波那契數

509. 斐波那契數 簡單 相關標簽 premium lock icon 相關企業 斐波那契數 &#xff08;通常用 F(n) 表示&#xff09;形成的序列稱為 斐波那契數列 。該數列由 0 和 1 開始&#xff0c;后面的每一項數字都是前面兩項數字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 …

FOC學習筆記(5)內嵌式電機與表貼式電機的區別

1. 引言 在現代電機設計中&#xff0c;永磁同步電機&#xff08;Permanent Magnet Synchronous Motor, PMSM&#xff09;因其高效率、高功率密度和優異的動態性能&#xff0c;在工業、新能源汽車、航空航天等領域得到廣泛應用。根據永磁體在轉子中的安裝方式不同&#xff0c;永…

算法 按位運算

按位與&#xff08;Bitwise AND&#xff09;和按位異或&#xff08;Bitwise XOR&#xff09; 按位與&#xff08;&&#xff09; 按位與是對兩個數的二進制表示的每一位進行邏輯與操作。 規則&#xff1a;兩個對應位都為1時&#xff0c;結果位才為1&#xff0c;否則為0。…

python3GUI--基于PyQt5+SQLite3的網址審核系統(詳細圖文)

文章目錄 一&#xff0e;前言二&#xff0e;相關知識1.PyQt52.sqlite3 三&#xff0e;效果預覽1.登錄2.注冊3.普通用戶身份權限4.管理員身份權限 三、技術討論1.數據展示表格1. 更強的表現力和交互性&#xff08;前端功能豐富&#xff09;2. 數據處理效率更高&#xff08;支持大…

與后端現場聯調mock數據

當我們后端在現場沒辦法連后端本地就可以使用mock數據&#xff0c;模擬后端返回數據。使用工具&#xff1a;apifox 一、安裝好以后--新建接口 舉個栗子&#xff1a; 我想建個接口http://123.123.123.123:8080/api/login 二、 新建期望&#xff0c;返回固定值&#xff0c;否則…

C# 事件(發布者和訂閱者)

發布者和訂閱者 很多程序都有一個共同的需求&#xff0c;即當一個特定的程序事件發生時&#xff0c;程序的其他部分可以得到 該事件已經發生的通知。 發布者/訂閱者模式&#xff08;publisher/subscriber pattem&#xff09;可以滿足這種需求。在這種模式中&#xff0c;發布 …

RediSearch高性能全文搜索引擎

RediSearch 是 RedisLabs 團隊開發的一個高性能全文搜索引擎&#xff0c;可作為一個 Redis Module 運行在 Redis 上。 Redis7&#xff1a;百萬數據級Redis Search 超越 ElasticSearch Redis Search是基于Redis的全文搜索引擎模塊&#xff08;RediSearch&#xff09;&#xff0c…

菜譜大全——字符串處理藝術:從文本解析到高效搜索 [特殊字符][特殊字符]

目錄 前言一、現實場景二、技術映射2.1 基礎刀工&#xff1a;String類2.2 高效剁餡&#xff1a;StringBuilder2.3 精準雕刻&#xff1a;正則表達式 三、知識點呈現3.1 String vs StringBuilder vs StringBuffer3.2 正則表達式核心語法速查3.3 字符串拼接性能陷阱 四、代碼實現五…

webpack+vite前端構建工具 -答疑

webpack答疑 1 輸入webpack命令&#xff0c;執行的是全局版本還是本地版本的webpack 當在命令行窗口輸入webpack命令時&#xff0c;其執行優先級可通過以下步驟明確判斷&#xff1a; 1.1 【全局安裝優先機制】 執行原理&#xff1a;系統會按照環境變量PATH的順序逐級查找可執…

API接口開放平臺 Crabc 3.4 發布

Crabc 是一款 API 接口開發平臺&#xff0c;企業級接口管理、SQL2API 平臺。支持動態數據源、動態 SQL 和標簽&#xff0c; 支持接入&#xff08;mysql、oracle、達夢、TiDB、hive、es 和 mongodb&#xff09;等 SQL 或 NoSQL 數據源&#xff0c;在線可視化編寫 SQL 快速發布接…