Android现有工程使用Compose
Android现有工程使用Compose
看了Compose的示例工程后,我们也想使用Compose。基于目前情况,在现有工程基础上添加Compose功能。
引入Compose
首先我们安装 Android Studio Arctic Fox 或更高版本。
项目的配置gradle/wrapper/gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip
项目的gradle
buildscript {
ext.kotlin_version = '1.5.21'repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}allprojects {
repositories {
google()
mavenCentral()
}
}
使用7.0.3 Android Gradle 插件。kotlin版本1.5.31
模块的gradle。最低API级别设置为21或更高,启用 Jetpack Compose。另外还要设置 Kotlin 编译器插件的版本。
apply plugin: 'kotlin-android' // 沿用开头的设置android {
compileSdkVersion 30
buildToolsVersion "30.0.2"defaultConfig {
minSdkVersion 21
// ...
}
buildFeatures {
// 启用 Jetpack Compose
compose true
}kotlinOptions {
jvmTarget = "1.8"
}compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}composeOptions {
kotlinCompilerExtensionVersion '1.0.1'
}
}
依赖
// Integration with activities
implementation 'androidx.activity:activity-compose:1.3.1'
// Compose Material Design
implementation 'androidx.compose.material:material:1.0.1'
// Animations
implementation 'androidx.compose.animation:animation:1.0.1'
// Tooling support (Previews, etc.)
implementation 'androidx.compose.ui:ui-tooling:1.0.1'
// Integration with ViewModels
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07'
// UI Tests
androidTestImplementation 'androidx.compose.ui:ui-test-junit4:1.0.1'
as的
Build. Execution, Deployment
- Build Tools
- Gradle
- Gradle JDk
选择as自带的Jre11使用Compose 新Activity
【Android现有工程使用Compose】前面的gradle设置完毕,新建一个activity来试一下。
// ComposeGuideAct.kt
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.layout.Column
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Previewclass ComposeGuideAct : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
GuidePage()
}
}
}@Composable
private fun GuidePage() {
Column {
Text(text = "Compose 示例", color = Color.Yellow)
Text(text = "an.rustfisher.com", color = Color.Yellow)
ShowHello(name = "小明")
ShowHello(name = "小强")
}
}@Composable
private fun ShowHello(name: String) {
Text(text = "Hi $name", color = Color.Cyan)
}
onCreate
中使用setContent
,传入一个带有@Composable
注解的可组合函数GuidePage()
。而
GuidePage()
里面又使用了ShowHello
、Column
和Text
。它们都是可组合函数。对于
GuidePage()
和ShowHello
函数,需要注意:- 它们带有
@Composable
注解。所有的可组合函数都必须带有此注解。它能告诉Compose编译器,把这数据转换为界面 - 可组合函数可以接受一些参数,这些参数可进行逻辑处理。上面代码里,
ShowHello(name: String)
接受一个name:String
- 函数可以在界面中显示文本。调用
Text()
可组合函数,该函数实际上会创建文本界面元素。可组合函数通过调用其他可组合函数来发出界面层次结构 - 函数不会返回任何内容。发出界面的 Compose 函数不需要返回任何内容,因为它们描述所需的屏幕状态,而不是构造界面微件。
至此我们可以说现有项目已经引入了Compose。
添加预览
可以给Compose添加预览,使用注解
@Preview
在上面的基础上,添加预览设置
@Preview("guide")
@Preview("guide - big",fontScale = 1.2f)
@Composable
fun PreviewPost() {
GuidePage()
}
添加2个预览,分别起名“guide”和“guide - big”。后者把字体调大一点。
PreviewPost()
方法里使用了我们之前定义的GuidePage()
。GuidePage()
也是实际工作中的代码。需要预览的方法,也需要添加
@Composable
注解Android Studio 预览效果
文章图片
预览界面也可以直接运行到手机上
小结 要在现有工程中引入Compose,需要对gradle进行设置。对老旧工程来说,变动比较大。甚至某些代码也要跟着改。
可组合函数使用
@Composable
注解。可以用as直接预览。参考
- Jetpack Compose 教程 - Google
- 将 Jetpack Compose 添加到应用中 - Google
- 引入 Jetpack Compose 示例工程
推荐阅读
- android第三方框架(五)ButterKnife
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- android|android studio中ndk的使用
- 全过程工程咨询——时间管理(12)
- 凡有的,还要多给他,凡没有的,连他现有的也要拿走
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库
- 深入理解|深入理解 Android 9.0 Crash 机制(二)