Kotlin Jetpack,如何使用字符串数组加载drawables



我正在使用以下代码将图像从drawables文件夹加载到buttons

Icon(
painter=painterResource(R.drawable.imageName),
modifier=Modifier.size(30.dp),
contentDescription="drawable icons",
tint=Color.Unspecified
)

但我想在循环中使用string array(如(的代码

val imageNames = arrayOf("image1", "image2")
for (k in imageNames.indices) {
Icon(
painter=painterResource(R.drawable.imageNames[k]),
modifier=Modifier.size(30.dp),
contentDescription="drawable icons",
tint=Color.Unspecified
)
}        

Drawables应该是可提取的价值资源,而不是中的String

val imageNames = arrayOf("image1", "image2")

应该是

val imageRes = arrayOf(R.drawable.ic_1, R.drawable.ic_2)
imageRes.forEach { res ->
Icon(
painter=painterResource(res),
modifier=Modifier.size(30.dp),
contentDescription="drawable icons",
tint=Color.Unspecified
)
}

但是,如果您想将image1image2字符串值映射到相应的Drawables,请考虑这一点,

@Composable
fun MyScreen() {
val imageNames = arrayOf("image1", "image2")
imageNames.forEach { imageString ->
val imageRes = imageString.mapToMyImageResource()
Icon(
painter=painterResource(imageRes),
modifier=Modifier.size(30.dp),
contentDescription="drawable icons",
tint=Color.Unspecified
)
}
}
@DrawableRes
fun String.mapToMyImageResource() : Int =
when (this) {
"image1" -> {
R.drawable.ic_1
}
"image2" -> {
R.drawable.ic_2
}
else -> {
R.drawable.ic_default
}
}
@Composable
fun ImageList() {
//declare your list as resource types
val imagesNames = arrayOf(R.drawable.image1,R.drawable.image2)
Column {
imageNames.forEach { image ->
Icon(
painter=painterResource(image),
modifier=Modifier.size(30.dp),
contentDescription="drawable icons",
tint=Color.Unspecified
)
}
}
}

希望你觉得它有帮助

最新更新