Функция BoxWithConstraints
Функция BoxWithConstraints работает как
Box, но приёмник лямбды
content знает ограничения родителя в момент раскладки.
Общее выравнивание задаёт параметр contentAlignment.
Внутри лямбды доступны свойства приёмника
maxWidth, maxHeight,
minWidth и minHeight
типа Dp.
Синтаксис
BoxWithConstraints {
val side = maxWidth / 2
child(side)
}
Параметры
| Параметр | Описание |
|---|---|
content |
Лямбда с дочерними элементами. Приёмник даёт
maxWidth, maxHeight,
minWidth и minHeight родителя.
Для выравнивания внутри области есть класс
BoxScope.
|
contentAlignment |
Выравнивание дочерних элементов по умолчанию.
Принимает значение класса
Alignment.
|
propagateMinConstraints |
Если true, минимальные ограничения родителя
передаются дочерним элементам при измерении.
По умолчанию false.
|
Пример
Давайте зададим ширину текста половиной доступной ширины:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.width
import androidx.compose.material3.Text
import androidx.compose.ui.Modifier
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
BoxWithConstraints(
modifier = Modifier.fillMaxSize(),
) {
Text(
text = "abcde",
modifier = Modifier.width(maxWidth / 2),
)
}
}
}
}
На экране текст займёт половину ширины области, которую занимает BoxWithConstraints.
Пример
Давайте покажем доступную высоту вторым текстом:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Text
import androidx.compose.ui.Modifier
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
BoxWithConstraints(
modifier = Modifier.fillMaxSize(),
) {
Column {
Text(text = "abcde")
Text(text = maxHeight.toString())
}
}
}
}
}
На экране под первым текстом появится строка с числом доступной высоты в dp.
Смотрите также
-
функция
Box,
которая накладывает элементы без доступа к ограничениям -
класс
Dp,
который хранит размер, не зависящий от плотности экрана -
класс
BoxScope,
который выравнивает дочерние элементы внутри области -
класс
LocalDensity,
который переводит dp в пиксели экрана