Альтернативное использование View.INVISIBLE в компоновке реактивного ранца

В xml мы используем View.INVISIBLE, чтобы вообще не отображать вид, но он по-прежнему занимает место для макета. Какова альтернатива в сочинении реактивного ранца?

AnimatedVisibility(
    // true or false
) {
    Button() // button code.
}
2
0
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете создать собственный модификатор для измерения Composable, занимающего место.

Что-то вроде:

fun Modifier.visible(visible: Boolean) = if (visible) this else this.then(Invisible)

private object Invisible : LayoutModifier {

    override fun MeasureScope.measure(
        measurable: Measurable,
        constraints: Constraints
    ): MeasureResult {
        val placeable = measurable.measure(constraints)
        return layout(placeable.width, placeable.height) {}
    }
}

очень красивое и чистое решение..

Vivek Modi 16.02.2023 23:27

Я просто использую функцию расширения alpha Modifier для достижения этой функциональности, которая может охватывать 90% вариантов использования, если только вы не используете альфа-канал для других целей. Я делаю это так, например, на тексте:

Text( modifier = Modifier.alpha(0f), text = "Lorem Ipsum")

Использование альфы, подобное этому, приведет к созданию графического слоя, но в нем ничего не будет нарисовано. Если это один компонуемый элемент, это, вероятно, не будет иметь большого значения, но это может повлиять на производительность при прокрутке контента.

Ian G. Clifton 21.02.2023 23:38

Другие вопросы по теме