СОЗДАЕТ: ПИСЬМАЯ ЧИСТИЧЕСКАAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 СОЗДАЕТ: ПИСЬМАЯ ЧИСТИЧЕСКА

Сообщение Anonymous »

Я хочу иметь фиксированный с дочерним элементом с указанной шириной, сопоставить высоту его родителя, внутри коробки. < /p>
См. Код ниже: < /p>

Код: Выделить всё

@Composable
fun LimitedWidthWithInBox(
modifier: Modifier = Modifier
) {
Box(modifier = modifier.fillMaxWidth()) {
// 🟣 Background box (fixed width, fills height of parent)
Box(
modifier = Modifier
.matchParentSize()            // match height of Box (driven by content)
.width(40.dp)         // fixed width
.background(color = Color.Yellow)
.align(Alignment.CenterStart), // stick to the left
contentAlignment = Alignment.TopStart
) {
Text("This should be within 40dp")
}

Column {
Spacer(modifier = Modifier.height(35.dp))
Text("2025.09.26",
modifier = Modifier
.border(1.dp, Color.Black, shape = RoundedCornerShape(15.dp))
.padding(5.dp)
)
Spacer(modifier = Modifier.height(30.dp))
}
}
}
его вывод:

Мое ожидаемое поведение - желтая область, которая должна быть показана с 40dp AS, но теперь он принимает полную вуза. Чтобы использовать FillMaxHeight вместо MatchParentSize , он действительно требует 40DP, но он требует более высокого размера вертикально,
выглядит как:

, но это может быть seethulation by by by by by br/> , но это может быть Seethulation. Столбец сестра < /code>,
мне было интересно любой другой подход более просты. Спасибо. Обязательно Whidth < /code>, безусловно, является правильным ответом на этот вопрос, спасибо за то, что научили меня этому! Это функция в моем проекте прямо сейчас: < /p>

Код: Выделить всё

@Composable
fun TimelineTagIndicator(
modifier: Modifier = Modifier,
strokeColorResId: Int = R.color.ai_widget_intelligent_plan_timeline_color,
strokeWidth: Dp = 1.1.dp,
strokePathEffect: PathEffect = PathEffect.dashPathEffect(floatArrayOf(6f, 6f)),
timelineColumnWidth: Dp = 40.dp,
isFirst: Boolean = false,
isLast: Boolean = false,
tagTopPadding: Dp = 15.dp,
tagBottomPadding: Dp = 10.dp,
content: @Composable () -> Unit
) {
Box(modifier = modifier.background(color = Color.Magenta)) {
var contentHeight by remember { mutableIntStateOf(0) }
var contentTopOffset by remember { mutableIntStateOf(0) }
val lineColor = colorResource(strokeColorResId)

val containerHeight = with(LocalDensity.current) {
contentHeight.toDp() + tagTopPadding + tagBottomPadding
}

Column(
modifier = Modifier
.width(timelineColumnWidth)
.height(containerHeight)
.background(color = Color.Yellow),
horizontalAlignment = Alignment.CenterHorizontally
) {
Canvas(
modifier = Modifier.fillMaxSize(),
) {
val strokeWidthPx = strokeWidth.toPx()
val centerX = size.width / 2

val startY = when {
isFirst -> contentTopOffset.toFloat() + contentHeight.toFloat()
isLast -> 0f
else -> 0f
}

val endY = when {
isLast -> contentTopOffset.toFloat()
else -> size.height
}

if (startY < endY) {
drawLine(
color = lineColor,
start = Offset(centerX, startY),
end = Offset(centerX, endY),
strokeWidth = strokeWidthPx,
pathEffect = strokePathEffect
)
}
}
}

Column {
Spacer(modifier = Modifier.height(tagTopPadding))
Box(
modifier = Modifier.onGloballyPositioned { coordinates ->
contentHeight = coordinates.size.height
contentTopOffset = coordinates.positionInParent().y.toInt()
}
) {
content()
}
Spacer(modifier = Modifier.height(tagBottomPadding))
}
}
}
Он не использует redingwidth , а вывод:

Это то, что я хочу, но ноги. Теперь я хочу избавиться от вычислений, вместо этого использовать какой -то модификатор, чтобы справиться с трюком: < /p>

Код: Выделить всё

Column(
modifier = Modifier
.matchParentSize()  // take the parent size
.requiredWidth(timelineColumnWidth) // set fixed width
.align(Alignment.TopStart)
.background(color = Color.Yellow),
horizontalAlignment = Alignment.Start
)
С помощью этого кода я ожидаю, что будет тот же результат, но на самом деле он выглядит как:

Затем я изменил запас контейнера на: br/>
. Затем я изменял запас контейнера на: br/>
. Затем я изменил контейнеру.

Код: Выделить всё

Box(modifier = modifier.background(color = Color.Magenta), contentAlignment = Alignment.TopStart) {
, но это ничего не помогло.
Надеюсь, я смогу использовать от вас, гуру! Надеюсь, проблема и описание были вам ясны. Спасибо заранее!

Подробнее здесь: https://stackoverflow.com/questions/797 ... within-box
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»