Wie benutze ich Drawabless in Compose Multiplattform?Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Wie benutze ich Drawabless in Compose Multiplattform?

Post by Anonymous »

Ich entwickle eine -Multiplattform -App App und möchte die gleichen PNG -Zeichnungsgüter sowohl für Android als auch für iOS verwenden.

Code: Select all

androidApp/src/main/res/
drawable-mdpi/icon.png
drawable-hdpi/icon.png
drawable-xhdpi/icon.png
drawable-xxhdpi/icon.png
drawable-xxxhdpi/icon.png
< /code>
für iOS in CommonMain < /p>
commonMain/composeResources/drawable/
icon.png
icon@2x.png
icon@3x.png
Als nächster Schritt muss ich dieses Symbol in CommonMain/kotlin/paket/app.kt wie

rememberPngPainter("icon.png")
< /code>
und hier beginnt mein Problem. Ist mein Ansatz zunächst korrekt? Laut Chagpt und Gemini ist es das richtige, aber es funktioniert nicht für iOS -Teil. Laut AIS sollte ich für Android -Teil wie diesen tun, was funktioniert: < /p>
@Composable
actual fun rememberPngPainter(name:String) : Painter {
@StringRes
val icon = when(name) {
"icon" -> R.drawable.icon
else -> R.drawable.other_icon
}
return painterResource(id = icon)
}
< /code>
Für iOS -Teil wie folgt: < /p>
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.painter.BitmapPainter
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asImageBitmap
import platform.UIKit.UIImage

@Composable
actual fun rememberPngPainter(name: String): Painter {
val icon = when(name) {
"icon" -> "icon.png"
else -> "other_icon.png"
}

val uiImage = UIImage.imageNamed(name)
?: error("Image not found: $imageName")

val imageBitmap: ImageBitmap = uiImage.toImageBitmap()
return BitmapPainter(imageBitmap)
}
< /code>
, was nicht funktioniert, da es keine Bibliothek gibt, die < /p>
verwendet hat ">.toImageBitmap()
< /code>
und Chatgpt beantwortet mich "Ich kann Ihnen nicht helfen". Aber Gemini gibt mir Alternative, um < /p>
zu verwenden.painterResource(resource = "icon.png")
< /code>
, was auch nicht existiert, während Gemini (auch AKSED CHAGPT darüber) sagt, dass dies hier ist, um zu finden: < /p>
compose-components-resources = { module = "org.jetbrains.compose.components:components-resources", version.ref = "1.5.1 or higher" }
< /code>
Ich habe alle Versionen überprüft und es gab jemals eine Malerresource mit String-Eingabe, nur < /p>
fun painterResource(resource: DrawableResource)
< /code>
Ich bin also festgefahren und weiß nicht, was ich sonst noch tun könnte. < /p>
Kann mir jemand dabei helfen? Vielen Dank in Advanced.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post