【问题标题】:In Android Studio, how to pass an image as a parameter to a function with Jetpack Compose?在 Android Studio 中,如何使用 Jetpack Compose 将图像作为参数传递给函数?
【发布时间】:2022-12-31 19:41:24
【问题描述】:

我正在制作一个“名片”应用程序,它基本上显示我的照片以及下面的联系信息。联系信息由多行组成,每行在左侧显示应用程序图标(例如:Instagram),在右侧显示我的信息(例如:我的 Instagram 用户名)。

我为每个应用程序制作了单独的可组合函数并调用它们并且它工作正常。

例如:-

@Composable
fun InstagramContactInfo() {
    Row(modifier = Modifier
        .fillMaxWidth()
        .padding(start = 30.dp, end = 30.dp, bottom = 16.dp),
        horizontalArrangement = Arrangement.SpaceBetween,
        verticalAlignment = Alignment.CenterVertically) {
        Image(
            painter = painterResource(R.drawable.icons8_instagram_48),
            contentDescription = "Instagram Icon",
            modifier = Modifier.size(50.dp)
        )
        Text(
            text = "@username",
            fontFamily = FontFamily.Monospace,
            color = Color.White,
        )
    }
}

我想创建一个函数,它只接受一个图像作为图标,一个用户句柄作为一个字符串,然后显示完全相同的东西。

如何将图像作为参数传递?

PS:我试图嵌入资源 ID 但它不起作用

@Composable
fun ContactInfo(icon: String, handle: String) {
    Row(modifier = Modifier
        .fillMaxWidth()
        .padding(start = 30.dp, end = 30.dp, bottom = 16.dp),
        horizontalArrangement = Arrangement.SpaceBetween,
        verticalAlignment = Alignment.CenterVertically) {
        Image(
            painter = painterResource(R.drawable.${icon}),
            contentDescription = "App Icon",
            modifier = Modifier.size(50.dp)
        )
        Text(
            text = handle,
            fontFamily = FontFamily.Monospace,
            color = Color.White,
        )
    }
}

【问题讨论】:

    标签: android android-studio kotlin android-layout android-jetpack-compose


    【解决方案1】:

    你应该像下面这样从字符串中获取可绘制对象。但它不是编译时安全的。如果特定图像在可绘制文件夹中不可用,它可能会抛出Exception 如果你有 id R.drawable.your_icon 的 drawable,你应该传递为 "your_icon"

    @Composable
    fun ContactInfo(icon: String, handle: String) {
        Row(modifier = Modifier
            .fillMaxWidth()
            .padding(start = 30.dp, end = 30.dp, bottom = 16.dp),
            horizontalArrangement = Arrangement.SpaceBetween,
            verticalAlignment = Alignment.CenterVertically) {
         Image(
                    painter = painterResource(
                        LocalContext.current.resources.getIdentifier(icon, "drawable", LocalContext.current.packageName)),
                    contentDescription = "App Icon",
                    modifier = Modifier.size(50.dp)
                )
             Text(
                text = handle,
                fontFamily = FontFamily.Monospace,
                color = Color.White,
            )
        }
    }
       
    

    但是,如果可以直接使用 Resource Id,则可以像下面那样使用它而不是字符串。

    @Composable
    fun ContactInfo(@DrawableRes icon: Int, handle: String) {
        Row(modifier = Modifier
            .fillMaxWidth()
            .padding(start = 30.dp, end = 30.dp, bottom = 16.dp),
            horizontalArrangement = Arrangement.SpaceBetween,
            verticalAlignment = Alignment.CenterVertically) {
            Image(
                painter = painterResource(icon),
                contentDescription = "App Icon",
                modifier = Modifier.size(50.dp)
            )
            Text(
                text = handle,
                fontFamily = FontFamily.Monospace,
                color = Color.White,
            )
        }
    }
    

    在这里你可以通过 R.drawable.your_icon

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-31
      • 2021-08-31
      • 2022-01-21
      • 2015-05-19
      • 1970-01-01
      • 2015-01-23
      • 2021-01-05
      相关资源
      最近更新 更多