Класс LocalDensity
LocalDensity - это
CompositionLocal, через который
получают текущую плотность экрана.
Свойство density показывает,
сколько пикселей приходится на один dp.
Методы toPx и roundToPx
переводят значение Dp
в пиксели для рисования на Canvas.
Синтаксис
val density = LocalDensity.current
val px = with(density) { 16.dp.toPx() }
Пример
Давайте покажем ширину экрана в dp и в пикселях:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Text
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val widthDp = LocalConfiguration.current.screenWidthDp.dp
val widthPx = with(LocalDensity.current) {
widthDp.toPx()
}
Column {
Text(text = widthDp.toString())
Text(text = widthPx.toString())
}
}
}
}
На экране первый текст покажет ширину в dp, второй - ту же ширину в пикселях.
Пример
Давайте округлим перевод dp в целые пиксели:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Text
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val px = with(LocalDensity.current) {
10.dp.roundToPx()
}
Text(text = px.toString())
}
}
}
На экране текст покажет целое число пикселей,
соответствующее 10 dp на этом устройстве.
Смотрите также
-
класс
Dp,
который хранит размеры независимо от плотности -
функция
BoxWithConstraints,
которая отдаёт размеры родителя уже в dp -
метод
size,
который задаёт размер элемента в dp без ручного перевода -
метод
offset,
который сдвигает элемент на заданное расстояние в dp