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

nlejzf6q  于 2022-12-31  发布在  Android
关注(0)|答案(1)|浏览(101)
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))
        }
    }

无法找到@Preview "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目标为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
pkwftd7m

pkwftd7m1#

@Preview不应该像这样应用,我在您的代码中看到了一些问题。
1.一个@Composable函数应该是一个顶级函数,而不是在一个类中,所以将您的donut函数移到MainActivity之外。另外,对于代码结构,如果您不介意它们对您的整个项目是公共的,我会将可组合对象移到一个不同的文件中,该文件的名称与该文件中的主要可组合对象的名称相同。如果您愿意,你可以把它和活动放在同一个文件中,并使它们成为私有的。
1.可组合对象命名约定希望它们的名称以大写字母开头,这与我们习惯的Kotlin或Java函数/方法不同。
1.您的代码应该像在MainActivity中一样使用您的可组合对象,但您的代码使用的任何代码都不应具有@Preview注解。请从donut函数中删除@Preview注解。
1.创建另一个函数作为可预览的组合函数,像这样调用你的donut函数(它可以是私有的)

@Preview
@Composable
private fun DonutPreview() {
    Donut()
}

相关问题