В xml мы используем View.INVISIBLE
, чтобы вообще не отображать вид, но он по-прежнему занимает место для макета. Какова альтернатива в сочинении реактивного ранца?
AnimatedVisibility(
// true or false
) {
Button() // button code.
}
Вы можете создать собственный модификатор для измерения 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) {}
}
}
Я просто использую функцию расширения alpha
Modifier для достижения этой функциональности, которая может охватывать 90% вариантов использования, если только вы не используете альфа-канал для других целей. Я делаю это так, например, на тексте:
Text( modifier = Modifier.alpha(0f), text = "Lorem Ipsum")
Использование альфы, подобное этому, приведет к созданию графического слоя, но в нем ничего не будет нарисовано. Если это один компонуемый элемент, это, вероятно, не будет иметь большого значения, но это может повлиять на производительность при прокрутке контента.
очень красивое и чистое решение..