原文地址:developer.android.com/jetpack/com…android
示例項目地址:github.com/android/com…git
Jetpack Compose是用於構建Android UI的工具包,基於聲明式編程模型,這樣你能夠簡單的描述UI的外觀,剩下的工做交給Compose處理,你的UI也會自動更新。它是基於Kotlin構建,因此能夠與Java互操做,而且能夠直接訪問Android和Jetpack Api。與現有的UI工具包兼容,因此你能夠混合使用。github
爲了得到Jetpack Compose最佳體驗,你須要下載最新版的Android Studio,當你使用Android Studio經過Jetpack Compose開發應用程序時可以得到最好的體驗,例如New Project模板能夠直接查看Compose UI.編程
從Android Studio menu bar選擇File > New > New Projectbash
在select a Project Template窗口,選擇Empty Compose Activity,點擊nextapp
在Configure your project窗口,作以下操做:jvm
將應用的Api級別設置爲21或更高,並在build.gradle中啓用Jetpack Compose。ide
android {
defaultConfig {
...
minSdkVersion 21
}
buildFeatures {
// Enables Jetpack Compose for this module
compose true
}
...
// Set both the Java and Kotlin compilers to target Java 8.
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
複製代碼
Jetpack Compose使用實驗版的Kotlin-gradle插件,在項目的build.gradle文件中添加以下配置:工具
buildscript {
...
dependencies {
classpath "org.android.tools.build:gradle:4.0.0-alpha01"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2"
}
}
複製代碼
Jetpack Compose使用一個自定義的Kotlin編譯器插件來提升運行效率,該編譯器還可以動態的應用更改以實現更快的迭代速度和更少的運行時間,添加composable依賴項到你的項目中:post
dependencies {
kotlinPlugin "androidx.compose:compose-compiler:0.1.0-dev02"
// You also need to include the following Compose toolkit dependencies.
implementation 'androidx.ui:ui-framework:0.1.0-dev02'
implementation 'androidx.ui:ui-tooling:0.1.0-dev02'
implementation 'androidx.ui:ui-layout:0.1.0-dev02'
implementation 'androidx.ui:ui-material:0.1.0-dev02’ implementation 'org.jetbrains.kotlin:kotlin-reflect:1.2' ... } 複製代碼
使用不一樣的尺寸、主題和字體縮放來預覽composable功能
下面是一個composable方法:
@Composable
fun TutorialPreviewTemplate(
colors: MaterialColors = lightThemeColors,
typography: MaterialTypography = themeTypography
) {
val context = +ambient(ContextAmbient)
val previewPosts = getPostsWithImagesLoaded(posts.subList(1, 2), context.resources)
val post = previewPosts[0]
MaterialTheme(colors = colors, typography = typography) {
Surface {
PostCardTop(post)
}
}
}
複製代碼
要建立實時預覽,須要建立一個無參的composable方法,而且在@Composable註解之上再添加@Preview註解。
/// This is the original composable function.
@Composable
fun TutorialPreviewTemplate( ... ) { ... }
// A new composable function that applies the @Preview annotation and does not
// take any parameters.
@Preview
@Composable
fun TutorialPreview() {
// Call the composable function that you would like to
// create a live preview for.
TutorialPreviewTemplate()
}
複製代碼
建立或修改實時預覽時,須要重修構建項目才能看到變化。
你能夠建立多個實時預覽,他們就會並排顯示在預覽窗口中。
/// This is the original composable function.
@Composable
fun TutorialPreviewTemplate( ... ) { ... }
@Preview
@Composable
fun TutorialPreview() { ... }
// This live preview uses the app's dark theme. @Preview @Composable fun TutorialPreviewDark() { // Although you can't pass arguments to the live preview function itself,
// you can pass arguments to the composable function that it calls.
TutorialPreviewTemplate(colors = darkThemeColors)
}
複製代碼
@Preview註解提供了一些參數能夠用來更改Composable方法在預覽窗口中呈現的樣式。例如你能夠傳遞字符串來命名實時預覽。
// Pass a name for the preview to easily identify it in the Preview window.
@Preview("Default colors")
@Composable
fun TutorialPreview() {
TutorialPreviewTemplate()
}
@Preview("Dark colors")
@Composable
fun TutorialPreviewDark() {
TutorialPreviewTemplate(colors = darkThemeColors)
}
複製代碼
能夠傳遞的參數以下:
@Preview("Font scaling 1.5, height 300", fontScale = 1.5f, heightDp = 300)
@Composable
fun TutorialPreviewFontscale() {
TutorialPreviewTemplate()
}
複製代碼