Android Compose Bloom 项目实战 (一) : 项目说明与配置

news/2025/4/1 6:11:41/

1. 项目介绍

Bloom是谷歌 AndroidDevChallenge (Android 开发挑战赛) 中的一期活动,目的是为了推广Compose,非常适合用来练手,通过这个项目,我们可以很好的入门Compose。本文介绍了如何从零开始,开发这个Compose项目。

设计稿和素材的下载地址 :
Android Compose Bloom 素材
其中,有个Bloom.pdf,里面是Bloom项目所需的UI设计稿。

我们要实现的效果如下所示,可以看到,一共有三个页面 : 欢迎页、登录页和主页。
在这里插入图片描述
当然也可以直接运行项目Demo的源码,看一下效果 : ComposeBloom源码地址

2. 新建项目

首先,我们需要新建一个Compose项目,这里选择Empty Compose Activity

在这里插入图片描述
这里项目名取为Bloom,包名我取为com.heiko.bloom

在这里插入图片描述

3. 配置素材

Bloom PDF的第一页,有我们所需要的素材
在这里插入图片描述

3.1 配置颜色、字体和形状

3.1.1 配置颜色

我们打开com.heiko.bloom.ui.theme包名下的Color.kt,复制如下内容

package com.heiko.bloom.ui.themeimport androidx.compose.ui.graphics.Colorval Purple200 = Color(0xFFBB86FC)
val Purple500 = Color(0xFF6200EE)
val Purple700 = Color(0xFF3700B3)
val Teal200 = Color(0xFF03DAC5)val pink100 = Color(0xFFFFF1F1)
val pink900 = Color(0xFF3F2C2C)
val white = Color(0xFFFFFFFF)
val white850 = Color(0xD9FFFFFF)
val gray = Color(0xFF232323)

3.1.2 配置字体

res文件夹下新建font文件夹,将这几个字体放到该文件夹下
在这里插入图片描述

然后,打开com.heiko.bloom.ui.theme包名下的Type.kt,复制如下内容

package com.heiko.bloom.ui.themeimport androidx.compose.material.Typography
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.android.style.LetterSpacingSpanEm
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp
import com.heiko.bloom.R// Set of Material typography styles to start with
val Typography = Typography(body1 = TextStyle(fontFamily = FontFamily.Default, fontWeight = FontWeight.Normal, fontSize = 16.sp)
)val nunitoSansFamily = FontFamily(Font(R.font.nunitosans_light, FontWeight.Light),Font(R.font.nunitosans_semibold, FontWeight.SemiBold),Font(R.font.nunitosans_bold, FontWeight.Bold)
)val h1 = TextStyle(fontSize = 18.sp, fontFamily = nunitoSansFamily, fontWeight = FontWeight.Bold
)val h2 = TextStyle(fontSize = 14.sp,fontFamily = nunitoSansFamily,letterSpacing = 0.15.sp,fontWeight = FontWeight.Bold
)val subtitle1 = TextStyle(fontSize = 16.sp, fontFamily = nunitoSansFamily, fontWeight = FontWeight.Light
)val body1 = TextStyle(fontSize = 14.sp, fontFamily = nunitoSansFamily, fontWeight = FontWeight.Light
)val body2 = TextStyle(fontSize = 12.sp, fontFamily = nunitoSansFamily, fontWeight = FontWeight.Light
)val button = TextStyle(fontSize = 14.sp, fontFamily = nunitoSansFamily, fontWeight = FontWeight.SemiBold
)val caption = TextStyle(fontSize = 12.sp, fontFamily = nunitoSansFamily, fontWeight = FontWeight.SemiBold
)

3.1.3 配置形状

打开com.heiko.bloom.ui.theme包名下的Shape.kt,复制如下内容

package com.heiko.bloom.ui.themeimport androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Shapes
import androidx.compose.ui.unit.dpval Shapes = Shapes(small = RoundedCornerShape(4.dp),medium = RoundedCornerShape(4.dp),large = RoundedCornerShape(0.dp)
)val small = RoundedCornerShape(4.dp)
val medium = RoundedCornerShape(24.dp)

3.2 添加资源文件

复制矢量图片到drawable文件夹下
在这里插入图片描述
复制JPEG图片到drawable-xxhdpi文件夹下
在这里插入图片描述

3.3 配置沉浸式状态栏

如果不配置这几行代码,状态栏会有特定颜色,这和UI稿不一致,所以我们需要将配置下沉浸式状态栏。

在这里插入图片描述
MainActivityonCreate方法中的最前面(位于setContent{}前面),添加如下代码

//DecorView不再为SystemUI(状态栏和导航栏等)预留Padding
WindowCompat.setDecorFitsSystemWindows(window, false)
val controller = WindowCompat.getInsetsController(window, window.decorView)
//状态栏设为亮色 (状态栏的文字、图标颜色为暗色)
controller?.isAppearanceLightStatusBars = true

style.xml中添加修改主题,并配置到AndroidManifest.xml

<style name="Theme.Bloom" parent="android:Theme.Material.Light.NoActionBar"><!--把状态栏设置为透明色--><item name="android:statusBarColor">#00000000</item>
</style>

AndroidManifest.xml

<activityandroid:name=".MainActivity"android:exported="true"android:label="@string/app_name"android:theme="@style/Theme.Bloom"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
</activity>

我们再运行项目
在这里插入图片描述
可以看到,状态栏已经是透明色了,而且Hello Android 这个Text的位置已经到了最顶上,和状态栏重叠了。这样我们的目的就达到了,我们可以将图片背景之类的设置在整个页面中,状态栏和其他布局融为一体,达到沉浸式状态的效果。

至此,我们就完成了项目的配置,接下来,我们就要来开发欢迎页了,这个会在下一篇文章中进行介绍

Compose 项目实战 系列文章
Android Compose Bloom 项目实战 (一) : 项目说明与配置
Android Compose Bloom 项目实战 (二) : 欢迎页
Android Compose Bloom 项目实战 (三) : 登录页
Android Compose Bloom 项目实战 (四) : 主页


http://www.ppmy.cn/news/310755.html

相关文章

2020年第11届蓝桥杯国赛javaC组

6.2020国赛javaC组 https://blog.csdn.net/qq_43449564/article/details/109841937 https://blog.csdn.net/imreal_/article/details/114272929 https://www.dtmao.cc/news_show_375163.shtml C 扩散 import java.util.LinkedList; import java.util.Queue; //定义每一个点…

Jetpack Compose 初体验(上),flutter人脸识别系统

fun VerticalText() { Column( modifier Modifier.padding(16.dp) ) { Text(“Hello World!”) Text(“Hello Again World!”) Text(“How old are you, World!”) } } 现在&#xff0c;为了让界面看起来不那么单调&#xff0c;我们给这个界面加上下面这一张图片。 ![](Compo…

Jetpack Compose 初体验(上),hashmap为什么是线程不安全的

2.布局 我们编写的应用界面几乎任何时候都不会是简简单单的单一的控件&#xff0c;而是一定数量的独立控件在空间上的一种组合。 首先&#xff0c;我们就盲猜&#xff0c;如果我想竖直方向排列三个文字组件&#xff0c;肯定不是像下面这样随便组合三个 Text 控件。它怎么可能…

[LeetCode周赛复盘] 第 314 场周赛20221009

[LeetCode周赛复盘] 第 314 场周赛20221009 一、本周周赛总结二、 [Easy] 6201. 找出前缀异或的原始数组1. 题目描述2. 思路分析3. 代码实现 三、[Easy] 6200. 处理用时最长的那个任务的员工1. 题目描述2. 思路分析3. 代码实现 四、[Medium] 6202. 使用机器人打印字典序最小的…

AndroidApp学习笔记

Android 发展历程 Android 是一个基于Linux 内核的自由及开发源代码的操作系统 2005 年 8 月由Google收购注资2007年11月发布Android的源代码2008 年10月第一部Android智能手机发布&#xff0c;HTC公司制造2011年 Android 位于世界第一2013 Android 系统数量达到10亿台 App运…

Android 控件 - TextView

1、TextView https://www.bilibili.com/video/BV13y4y1E7pF?p3 1.1、layout_width、layout_height match_parent&#xff1a;表示让当前控件的大小和父布局的大小一样&#xff0c;也就是由父布局来决定当前控件的大小 wrap_content&#xff1a;表示让当前的控件大小能够刚好…

Android登陆页面

文章目录 一、案例演示二、项目构造三、实现代码1、activity_main.xml2、button_pressed_text.xml3、button_pressed_text2.xml4、colors.xml5、图片6、MainActivity.java 一、案例演示 整个屏幕分为四个模块&#xff0c;由上到下logo第一模块&#xff0c;手机号密码第二模块&…

Adongua的算法模板

文章目录 Adongua的算法模板⭐如何根据数据范围判断大致时间复杂度一、STL1.set2.priority_queue3.STL建堆4.vector5.二分查找&#xff1a;upper_bound与lower_bound6.pbds平衡树7.unique函数8.stringstream解决一行不知道输入多少个数的输入问题9.判断字母大小写及数字 二、数…