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) // 设置最大最小的宽度和高度
gravity
在Column
中元素的位置。
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)**