IT评测·应用市场-qidao123.com

标题: 【Android】Compose初识 [打印本页]

作者: 笑看天下无敌手    时间: 2025-2-24 04:11
标题: 【Android】Compose初识
1.Compose是什么

Jetpack Compose是谷歌开辟的一个现代的、声明式的UI工具包,用于构建原生的Android应用程序界面。它简化了创建复杂用户界面的过程,而且让开辟者能够以更直观和高效的方式编写代码。
2.Compose上风


3.可组合函数

在Jetpack Compose中,可组合函数(Composable functions)是构建用户界面的核心概念。它们是以特定方式定义的函数,用于形貌应用UI的一部分。通过将多个可组合函数组合在一起,可以构建出整个应用程序的用户界面。
  1. class MainActivity : ComponentActivity() {
  2.     override fun onCreate(savedInstanceState: Bundle?) {
  3.         super.onCreate(savedInstanceState)
  4.         setContent {
  5.             MessageCard("My Android")
  6.         }
  7.     }
  8.     @Composable
  9.     fun MessageCard(name : String){
  10.         Text(text = "Hello $name!", modifier = Modifier.padding(4.dp))
  11.     }
  12.     @Preview
  13.     @Composable
  14.     fun PreviewMessageCard(){
  15.         MessageCard(name = "My Android")
  16.     }
  17. }
复制代码
4.结构

使用Column垂直分列元素,使用Row程度分列项,使用Box堆叠元素。
  1.     @Composable
  2.     fun MessageCard(msg : Message){
  3.         Row {
  4.             Image(
  5.                 painter = painterResource(id = R.drawable.ic_launcher_foreground),
  6.                 contentDescription = null
  7.             )
  8.             Column {
  9.                 Text(text = msg.author)
  10.                 Text(text = msg.body)
  11.             }
  12.         }
  13.     }
复制代码

5.设置结构

为了装饰或设置可组合项,Compose使用修饰符。通过修饰符,您可以更改可组合项的大小、结构、外观,还可以添加高级互动,例如使元素可点击。您可以将这些修饰度链接起来,以创建更丰富的可组合项。
  1.     @Composable
  2.     fun MessageCard(msg : Message){
  3.         Row(modifier = Modifier.padding(all = 8.dp)) {
  4.             Image(
  5.                 painter = painterResource(id = R.drawable.img),
  6.                 contentDescription = "ikun",
  7.                 modifier = Modifier
  8.                     .size(40.dp)
  9.                     .clip(CircleShape)
  10.             )
  11.             Column {
  12.                 Text(text = msg.author)
  13.                 Spacer(Modifier.height(4.dp))
  14.                 Text(text = msg.body)
  15.             }
  16.         }
  17.     }
复制代码

6.Material Design

Material Design 是由谷歌开辟的一套视觉设计语言,旨在为用户界面提供一致且高质量的设计标准。它不光是一组视觉指南,还包罗了交互模式、动画、排版、图标、颜色等多方面的规范,帮助开辟者和设计师构建直观、美观且功能强大的用户体验。
Material Design 组件与模式

7.列表与动画

在 Jetpack Compose 中,列表和动画是构建动态且交互性强的用户界面的关键元素。Jetpack Compose 提供了内置的支持来简化这些功能的实现。
  1. class MainActivity04 : ComponentActivity() {
  2.     override fun onCreate(savedInstanceState: Bundle?) {
  3.         super.onCreate(savedInstanceState)
  4.         setContent {
  5.             ComposeTestTheme {
  6.                 Conversation(SampleData.conversationSample)
  7.             }
  8.         }
  9.     }
  10.     @Composable
  11.     fun MessageCard(msg : Message){
  12.         Row(modifier = Modifier.padding(all = 8.dp)) {
  13.             Image(
  14.                 painter = painterResource(id = R.drawable.img),
  15.                 contentDescription = "ikun",
  16.                 modifier = Modifier
  17.                     .size(40.dp)
  18.                     .clip(CircleShape)
  19.             )
  20.             Spacer(modifier = Modifier.width(8.dp))
  21.             var isExpanded by remember {
  22.                 mutableStateOf(false)
  23.             }
  24.             val surfaceColor : Color by animateColorAsState(
  25.                 if (isExpanded) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.surface
  26.             )
  27.             Column(
  28.                 modifier = Modifier.clickable { isExpanded = !isExpanded}
  29.             ) {
  30.                 Text(
  31.                     text = msg.author,
  32.                     color = MaterialTheme.colorScheme.secondary
  33.                 )
  34.                 Spacer(Modifier.height(4.dp))
  35.                 Surface(
  36.                     shape = MaterialTheme.shapes.medium,
  37.                     shadowElevation = 1.dp,
  38.                     color = surfaceColor,
  39.                     modifier = Modifier
  40.                         .animateContentSize()
  41.                         .padding(1.dp)
  42.                 ) {
  43.                     Text(
  44.                         text = msg.body,
  45.                         modifier = Modifier.padding(4.dp),
  46.                         style = MaterialTheme.typography.bodyMedium,
  47.                         maxLines = if (isExpanded) Int.MAX_VALUE else 1
  48.                     )
  49.                 }
  50.             }
  51.         }
  52.     }
  53.     @Composable
  54.     fun Conversation(messages : List<Message>){
  55.         LazyColumn {
  56.             items(messages) { message ->
  57.                 MessageCard(message)
  58.             }
  59.         }
  60.     }
  61. }
复制代码

8.声明式UI

声明式UI(Declarative User Interface)是一种用户界面编程范式,它答应开辟者以声明的方式形貌用户界面的结构和举动,而不是具体地指定如何实现这些举动。这意味着你只需要告诉框架你想要什么样子的UI,而不需要管理UI的状态转换过程。
在声明式UI中,开辟者通常定义一个UI的状态模型,并基于这个状态来构建UI。当底层数据或状态改变时,UI会主动更新以反映最新的状态。这种方式简化了UI代码的编写和维护,因为它减少了手动操纵DOM或视图层级的需要,同时使得UI逻辑更加直观易懂。
9.组合

在Jetpack Compose中,“组合”(Composition)是指通过组合多个可组合函数(composable functions)来构建用户界面的过程。
在Compose中,一个组合可以被视为一系列的可组合函数调用,这些函数共同形貌了应用的UI。每个可组合函数都可以包罗其他可组合函数,形成一个树状结构,这棵树代表了整个应用程序的UI条理。这种模式使得代码具有高度的模块化和复用性,因为你可以在不同的地方重用雷同的UI组件。
  1. @Composable
  2. fun MyApp() {
  3.     // 定义顶层UI
  4.     MaterialTheme {
  5.         Surface(color = MaterialTheme.colors.background) {
  6.             MyScreenContent()
  7.         }
  8.     }
  9. }
  10. @Composable
  11. fun MyScreenContent(names: List<String> = listOf("World", "Compose")) {
  12.     Column {
  13.         for (name in names) {
  14.             Greeting(name = name)
  15.         }
  16.     }
  17. }
  18. @Composable
  19. fun Greeting(name: String) {
  20.     Text(text = "Hello $name!")
  21. }
复制代码
10.重组

“重组”(Recomposition)是指当状态改变时,Compose系统重新执行可组合函数以更新UI的过程。这是Jetpack Compose响应式编程模型的核心部分,它确保了UI总是与最新的应用状态保持同步。
重组的工作原理

控制重组
为了优化性能和确保正确的逻辑执行,开辟者可以接纳以下步伐:

  1. @Composable
  2. fun Counter(count: Int, onIncrement: () -> Unit) {
  3.     // 当count变化时,这个Text组件会重组并显示新的计数值
  4.     Text(text = "Count: $count")
  5.    
  6.     // 这个按钮点击时会调用onIncrement回调函数,导致count状态变化
  7.     Button(onClick = onIncrement) {
  8.         Text("Increment")
  9.     }
  10. }
  11. @Composable
  12. fun CounterApp() {
  13.     var count by remember { mutableStateOf(0) }
  14.     Counter(count = count) {
  15.         count++
  16.     }
  17. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4