Android全新UI编程 - Jetpack Compose 超详细教程

本文介绍了JetpackCompose中的主题设置,包括`@Composable`中的`JetpackComposeDemoTheme`与`DarkColorPalette`、`LightColorPalette`,以及如何使用`Modifier`进行UI元素布局和空间管理,重点讲解了`Column`和`Row`的用法。此外,还提到了如何利用`Material`设计原则优化UI构建。
摘要由CSDN通过智能技术生成
2.2.4 *Theme

在创建新的Compose项目时会自动创建一个项目名+Theme@Compose方法。 我们可以通过更改颜色来完成对主题颜色的设置。 生成的Theme方法的代码如下。

private val DarkColorPalette = darkColorPalette(

primary = purple200,

primaryVariant = purple700,

secondary = teal200

)

private val LightColorPalette = lightColorPalette(

primary = purple500,

primaryVariant = purple700,

secondary = teal200

/* Other default colors to override

background = Color.White,

surface = Color.White,

onPrimary = Color.White,

onSecondary = Color.Black,

onBackground = Color.Black,

onSurface = Color.Black,

*/

)

@Composable

fun JetpackComposeDemoTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable() () -> Unit) {

val colors = if (darkTheme) {

DarkColorPalette

} else {

LightColorPalette

}

MaterialTheme(

colors = colors,

typography = typography,

shapes = shapes,

content = content

)

}

Theme方法中有正常主题和Dark主题的颜色设置,里面还有关于MeterialTheme的设置。

关于Theme方法的用法如下。

setContent {

JetpackComposeDemoTheme {

Greeting(“Android”)

}

}

JetpackComposeDemoTheme里面的所有UI方法都会应用上述主题中指定的颜色。

2.2.4 Modifier

Modifier是各个Compose的UI组件一定会用到的一个类。它是被用于设置UI的摆放位置,padding等信息的类。关于Modifier相关的设置实在是太多,在这里只介绍会经常用到的。

  • padding 设置各个UI的padding。padding的重载的方法一共有四个。

Modifier.padding(10.dp) // 给上下左右设置成同一个值

Modifier.padding(10.dp, 11.dp, 12.dp, 13.dp) // 分别为上下左右设值

Modifier.padding(10.dp, 11.dp) // 分别为上下和左右设值

Modifier.padding(InnerPadding(10.dp, 11.dp, 12.dp, 13.dp))// 分别为上下左右设值

  • plus 可以把其他的Modifier加入到当前的Modifier中。

Modifier.plus(otherModifier) // 把otherModifier的信息加入到现有的modifier中

  • fillMaxHeight,fillMaxWidth,fillMaxSize 类似于match_parent,填充整个父layout。

Modifier.fillMaxHeight() // 填充整个高度

  • width,heigh,size 设置Content的宽度和高度。

Modifier.width(2.dp) // 设置宽度

Modifier.height(3.dp) // 设置高度

Modifier.size(4.dp, 5.dp) // 设置高度和宽度 复制代码

  • widthIn, heightIn, sizeIn 设置Content的宽度和高度的最大值和最小值。

Modifier.widthIn(2.dp) // 设置最大宽度

Modifier.heightIn(3.dp) // 设置最大高度

Modifier.sizeIn(4.dp, 5.dp, 6.dp, 7.dp) // 设置最大最小的宽度和高度

  • gravityColumn中元素的位置。

Modifier.gravity(Alignment.CenterHorizontally) // 横向居中

Modifier.gravity(Alignment.Start) // 横向居左

Modifier.gravity(Alignment.End) // 横向居右

  • rtl, ltr 开始布局UI的方向。

Modifier.rtl // 从右到左

Modifier.ltr // 从左到右 复制代码`

Modifier的方法都返回Modifier的实例的链式调用,所以只要连续调用想要使用的方法即可。

`@Composable

fun Greeting(name: String) {

Text(text = "Hello $name!", modifier = Modifier.padding(20.dp).fillMaxSize())

} 





#### []( )2.2.5 Column,Row



正如其名字一样,`Column`和`Row`可以理解为在`View/Layout`体系中的纵向和横向的`ViewGroup`。  

需要传入的参数一共有四个。



*   `Modifier` 用上述的方法传入已经按需求设置好的Modifier即可。



*   `Arrangement.Horizontal`, `Arrangement.Vertical` 需要给`Row`传入`Arrangement.Horizontal`,为`Column`传入`Arrangement.Vertical`。 这些值决定如何布置内部UI组件。  

可传入的值为`Center`, `Start`, `End`, `SpaceEvenly`, `SpaceBetween`, `SpaceAround`。 重点解释一下`SpaceEvenly`, `SpaceBetween`, `SpaceAround`。





`SpaceEvenly`:各个元素间的空隙为等比例。



![](https://img-blog.csdnimg.cn/img_convert/f9b81903d40b76063e4cb64ea2547e5c.png)



`SpaceBetween`:第一元素前和最后一个元素之后没有空隙,所有空隙都按等比例放入各个元素之间。  

![](https://img-blog.csdnimg.cn/img_convert/168b4b64aab0b51484b367356960edac.png)



`SpaceAround`:把整体中一半的空隙平分的放入第一元素前和最后一个元素之后,剩余的一半等比例的放入各个元素之间。  

![](https://img-blog.csdnimg.cn/img_convert/a5467bb177105c94edb4b00e8e709c67.png)



*   `Alignment.Vertical`, `Alignment.Horizontal` 需要给`Row`传入`Alignment.Vertical`,为`Column`传入`Alignment.Horizontal`。 使用方法和`Modifier`的`gravity`中传入参数的用法是一样的,这里就略过了。



*   `@Composable ColumnScope.() -> Unit` 需要传入标有`@Compose`的UI方法。但是这里我们会有lamda函数的写法来实现。





整体代码如下。





Column {

Row(modifier = Modifier.ltr.fillMaxWidth(),horizontalArrangement = Arrangement.SpaceAround, verticalGravity = Alignment.Top) {

// ..,...

} 





![](https://img-blog.csdnimg.cn/img_convert/375abb3acd3b67b27891240f51ef516c.png)



[]( )3\. 其他

----------------------------------------------------------------------



客观地讲,Compose 确实是一套比较难学的东西,因为它毕竟太新也太大了,它是一个完整的、全新的框架,确实让很多人感觉「学不动」,这也是个事实。



[]( )那怎么办呢?学不动怎么办呢?

------------------------------------------------------------------------------



如果你是因为缺少学习资料,而我正好薅到这本谷歌内部大佬根据实战编写的《**Jetpack Compose最全上手指南**》,从入门到精通,教程通俗易懂,实例丰富,既有基础知识,也有进阶技能,能够帮助读者快速入门,是你学习Jetpack Compose的葵花宝典,快收藏起来!!!



[]( )那怎么办呢?学不动怎么办呢?

------------------------------------------------------------------------------



如果你是因为缺少学习资料,而我正好薅到这本谷歌内部大佬根据实战编写的《**Jetpack Compose最全上手指南**》,从入门到精通,教程通俗易懂,实例丰富,既有基础知识,也有进阶技能,能够帮助读者快速入门,是你学习Jetpack Compose的葵花宝典,快收藏起来!!!



### []( )第一章 初识 Jetpack Compose



**1\. 为什么我们需要一个新的UI 工具?**



**2\. Jetpack Compose的着重点**



*   加速开发

*   强大的UI工具

*   直观的Kotlin API



![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526174035893.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FuZHJvaWQyMzMzMw==,size_16,color_FFFFFF,t_70)



**3\. API 设计**



![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526174046755.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FuZHJvaWQyMzMzMw==,size_16,color_FFFFFF,t_70)



**4\. Compose API 的原则**



*   一切都是函数

*   顶层函数(Top-level function)

*   组合优于继承

*   信任单一来源  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526174058840.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FuZHJvaWQyMzMzMw==,size_16,color_FFFFFF,t_70)



**5\. 深入了解Compose**



*   Core

*   Foundation

*   Material



![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526174107488.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FuZHJvaWQyMzMzMw==,size_16,color_FFFFFF,t_70)



**6\. 插槽API**



### []( )第二章 Jetpack Compose构建Android UI



**1\. Android Jetpack Compose 最全上手指南**



*   Jetpack Compose 环境准备和Hello World

*   布局

*   使用Material design 设计

*   Compose 布局实时预览

*   ……



![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526174116157.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FuZHJvaWQyMzMzMw==,size_16,color_FFFFFF,t_70)



**2\. 深入详解 Jetpack Compose | 优化 UI 构建**



*   Compose 所解决的问题

*   Composable 函数剖析

*   声明式 UI

*   组合 vs 继承

*   封装

*   重组

*   ……



![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526174124492.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FuZHJvaWQyMzMzMw==,size_16,color_FFFFFF,t_70)



**3\. 深入详解 Jetpack Compose | 实现原理**



*   @Composable 注解意味着什么?

*   执行模式

*   Positional Memoization (位置记忆化)

*   存储参数

*   重组

*   ……



![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526174131758.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FuZHJvaWQyMzMzMw==,size_16,color_FFFFFF,t_70)



### []( )第三章 Jetpack Compose 项目实战演练(附Demo)



**1\. Jetpack Compose应用1**



*   开始前的准备

*   创建DEMO

*   遇到的问题



![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526174142665.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FuZHJvaWQyMzMzMw==,size_16,color_FFFFFF,t_70)



**2\. Jetpack Compose应用2**



**3\. Jetpack Compose应用做一个倒计时器**



*   数据结构

*   倒计时功能

*   状态模式

*   Compose 布局

*   绘制时钟



![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526174155252.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FuZHJvaWQyMzMzMw==,size_16,color_FFFFFF,t_70)



**4\. 用Jetpack Compose写一个玩安卓App**



*   准备工作

*   引入依赖

*   新建 Activity
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/1837f6967e1b4d66955125516dbcafff.png)

![img](https://img-blog.csdnimg.cn/img_convert/ececc6fe37e68cbf036fe53dc9a2b09d.png)

![img](https://img-blog.csdnimg.cn/img_convert/3992bf1860e612dc2ad2a964379dc1b1.png)

![img](https://img-blog.csdnimg.cn/img_convert/2e0c7855bc317e92f33baa9bc7e99de4.png)

![](https://img-blog.csdnimg.cn/img_convert/d9227692d4876e32efa17763064f796a.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

**如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)**






### 最后

**有任何问题,欢迎广大网友一起来交流,分享高阶Android学习视频资料和面试资料包~**

偷偷说一句:群里高手如云,欢迎大家加群和大佬们一起交流讨论啊!

![](https://img-blog.csdnimg.cn/img_convert/40394ab2c323cac390273789ff241f7a.webp?x-oss-process=image/format,png)


**《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》[点击传送门即可获取!](https://bbs.csdn.net/forums/f76c2498e3b04ae99081eaf6e6cf692c)**

图片转存中...(img-fGGqMPDB-1712549528479)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

**如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)**






### 最后

**有任何问题,欢迎广大网友一起来交流,分享高阶Android学习视频资料和面试资料包~**

偷偷说一句:群里高手如云,欢迎大家加群和大佬们一起交流讨论啊!

[外链图片转存中...(img-hNs5TA30-1712549528479)]


**《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》[点击传送门即可获取!](https://bbs.csdn.net/forums/f76c2498e3b04ae99081eaf6e6cf692c)**

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值