Это прототип Row
:
@Composable
public inline fun Row(
modifier: Modifier = Modifier,
horizontalArrangement: Arrangement.Horizontal = Arrangement.Start,
verticalAlignment: Alignment.Vertical = Alignment.Top,
content: @Composable() (RowScope.() -> Unit)
): Unit
А это BottomAppBar
:
@Composable
@ComposableInferredTarget
public fun BottomAppBar(
modifier: Modifier,
containerColor: Color,
contentColor: Color,
tonalElevation: Dp,
contentPadding: PaddingValues,
windowInsets: WindowInsets,
content: @Composable() (RowScope.() -> Unit)
): Unit
Содержимое BottomAppBar
находится в RowScope
. И Row
знает о horizontalArrangement
, и я хотел бы установить его на Arrangement.SpaceEvenly
. Но у BottomAppBar
нет аргументов для этого. Как я могу установить расположение в нижней панели приложения на «равномерное пространство»?
Вы не можете указать horizontalArrangement
.
content
из BottomAppBar
находится в RowScope
, но Row
определяется внутри:
@Composable
fun BottomAppBar(
//...
content: @Composable RowScope.() -> Unit
) {
Surface(
//...
modifier = modifier
) {
Row(
Modifier
.fillMaxWidth()
.windowInsetsPadding(windowInsets)
.height(BottomAppBarTokens.ContainerHeight)
.padding(contentPadding),
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.CenterVertically,
content = content
)
}
К счастью, код достаточно мал, чтобы его можно было клонировать.
@Composable
fun MyBottomAppBar(
modifier: Modifier = Modifier,
containerColor: Color = BottomAppBarDefaults.containerColor,
contentColor: Color = contentColorFor(containerColor),
tonalElevation: Dp = BottomAppBarDefaults.ContainerElevation,
contentPadding: PaddingValues = BottomAppBarDefaults.ContentPadding,
windowInsets: WindowInsets = BottomAppBarDefaults.windowInsets,
content: @Composable RowScope.() -> Unit
) {
Surface(
color = containerColor,
contentColor = contentColor,
tonalElevation = tonalElevation,
//shape = ShapeKeyTokens.CornerNone,
modifier = modifier
) {
Row(
Modifier
.fillMaxWidth()
.windowInsetsPadding(windowInsets)
.height(80.0.dp)
.padding(contentPadding),
horizontalArrangement = Arrangement.SpaceEvenly,
verticalAlignment = Alignment.CenterVertically,
content = content
)
}
}
Форма кажется не обязательной.
@z.y Не понимаю.
Разве они не выглядят одинаково, но меньше хлопот при копировании/клонировании других параметров?