Julius Marozas
07/13/2020, 4:56 PMLinearProgressIndicator
below an app bar. Can I hide the progress indicator without affecting the content below it? I am looking for something like View.INVISIBLE
(and not View.GONE
).Alejandro Rios
07/13/2020, 4:57 PMBox
and hide the Box
?Zach Klippenstein (he/him) [MOD]
07/13/2020, 4:58 PMModifier.opacity(0f)
to your indicator.Julius Marozas
07/13/2020, 5:04 PMBox(modifier = Modifier.height(ProgressIndicatorConstants.DefaultStrokeWidth)) {
if (showProgress)
LinearProgressIndicator(modifier = Modifier.fillMaxWidth()
}
with `opacity`:
LinearProgressIndicator(modifier = Modifier.fillMaxWidth().drawOpacity(if (showProgress) 1f else 0f))
The opacity
approach is a little bit simpler. But I think something like View.INVISIBLE
would also be useful.Zach Klippenstein (he/him) [MOD]
07/13/2020, 5:07 PMfun Modifier.visible(visible: Boolean) = drawOpacity(if (visible) 1f else 0f)
, although there’s probably also some semantics/input considerations that it should take into account (e.g. disabling input, marking as hidden for accessibility, etc).Timo Drick
07/14/2020, 7:39 PMenum class Visibility {
VISIBLE, INVISIBLE, GONE
}
@Composable
fun Modifier.visibility(visibility: Visibility) = this + object : LayoutModifier {
override fun MeasureScope.measure(
measurable: Measurable,
constraints: Constraints,
layoutDirection: LayoutDirection
): MeasureScope.MeasureResult = if (visibility == Visibility.GONE) {
layout(0, 0) {
// Empty placement block
}
} else {
val placeable = measurable.measure(constraints)
layout(placeable.width, placeable.height) {
if (visibility == Visibility.VISIBLE) {
placeable.place(0, 0)
}
}
}
}
Zach Klippenstein (he/him) [MOD]
07/14/2020, 7:57 PMconstraints.offset()
call for in the else
block?Timo Drick
07/14/2020, 7:59 PMZach Klippenstein (he/him) [MOD]
07/14/2020, 8:00 PM