是否可以在MainActivity中使用不同的参数调用一个甜甜圈例程?


class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Row() {
donut(_size = 100.dp, _padding = 10.dp)
}
}
}
@Preview
@Composable
fun donut(_size: Dp = 120.dp, _padding: Dp = 5.dp) {
Box(modifier = Modifier
.size(_size)
.clip(CircleShape)
.background(Color.Green)
.padding(_padding)
.clip(CircleShape)
.background(Color.Red))
}
}

无法找到@预览'com.pelicancolder.chapter1_03.MainActivity.donut'重建项目后将显示预览

重建项目显示相同的错误信息。

我使用的是compose 1.1.1和Kotlin 1.6.10,所以似乎没有不兼容的地方。

构建。gradle文件:

buildscript {
ext {
compose_ui_version = '1.1.1'
}
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '7.3.1' apply false
id 'com.android.library' version '7.3.1' apply false
id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
}

jvm_target is 1.8

:

Android Studio Dolphin | 2021.3.1 Patch 1
Build #AI-213.7172.25.2113.9123335, built on September 29, 2022
Runtime version: 11.0.13+0-b1751.21-8125866 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 10 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 1280M
Cores: 12
Registry:
external.system.auto.import.disabled=true
ide.text.editor.with.preview.show.floating.toolbar=false

@Preview不应该像这样应用,我看到你的代码中有几个问题。

  1. 一个@Composable函数应该是一个顶级函数,而不是在一个类中,所以移动你的donut函数在MainActivity之外。同样的代码结构,如果你不介意他们是公共的,你的整个项目,我会移动到一个不同的文件,以相同的名称命名的主要可组合文件内。如果你愿意,你可以把它和活动保存在同一个文件中,并把它们设为私有。
  2. 可组合程序的命名约定希望它们的名字以大写字母开头,不像我们习惯使用Kotlin或Java函数/方法。
  3. 你的组合应该由你的代码使用,因为你在你的MainActivity中做的,但没有代码使用你的代码应该有@Preview注释。从您的甜甜圈函数中删除@Preview注释。
  4. 创建另一个函数作为你的可预览组合来调用你的甜甜圈函数,像这样(它可以是私有的)
@Preview
@Composable
private fun DonutPreview() {
Donut()
}

最新更新