Die meisten von Jetpack Compose API werden verwendet Dp als Maßeinheit, aber manchmal ist ein Pixelwert erforderlich. Wie kann ich einen dp-Wert in px umwandeln? Nur als Beispiel gibt’s GraphicsLayer() Modifikator, der akzeptiert translationX/Y
Argumente in Pixel.
Wie konvertiere ich Dp in Pixel in Android Jetpack Compose?
Walerij Katkow
Es gibt toPx()
und roundToPx()
Methoden definiert durch Dichte Schnittstelle, Sie können es wie folgt verwenden:
import androidx.compose.ui.platform.LocalDensity
val pxValue = with(LocalDensity.current) { 16.dp.toPx() }
// or
val pxValue = LocalDensity.current.run { 16.dp.toPx() }
Ein solcher Ausdruck könnte verwirrend aussehen, wenn Sie neu in der Kotlin-Sprache sind, also lassen Sie uns ihn aufschlüsseln und sehen, wie er funktioniert. toPx()
ist ein Erweiterungsfunktion von Dp
Klasse, Sie können es sich als eine vorstellen Dp
Klasse Methode. Aber seit toPx()
ist innen definiert Dichte Schnittstelle, können Sie es nicht verwenden, es sei denn, Sie stellen eine Dichte als Empfänger bereit. Und schließlich können Sie die Stromdichte von an erhalten ZusammensetzungLokal genannt Lokale Dichte.
-
Wird AmbientDensity nun CompositionLocalDensity heißen? (Eigentlich heißt es
LocalDensity
jetzt habe ich nachgesehen)– EpicPandaForce
15. Februar 2021 um 12:28 Uhr
-
@EpicPandaForce Danke! In der Tat,
Ambient
s werden benanntCompositionLocal
ist seitalpha-12
ich habe die Antwort aktualisiert– Walerij Katkow
15. Februar 2021 um 15:01 Uhr
-
tolle Erklärung der Syntax; Ich bin hierher gekommen, um genau zu suchen, was das für Zauberei ist!
– Benutzer2297550
24. Februar 2021 um 15:27 Uhr
-
Und wenn Sie von Pixeln in Dp konvertieren möchten, ist es das
LocalDensity.current.run { 16.toDp() }
– Seekatze
18. November 2021 um 13:09 Uhr
-
seltsam, es erfordert @Composable-Kontext zum Umwandeln von dp in px. Warum?
– Michael Abyzov
11. August 2022 um 12:08 Uhr