Status Update
Comments
de...@gmail.com <de...@gmail.com> #2
full error is below
ID: 26421
java.lang.IllegalStateException: Asking for intrinsic measurements of SubcomposeLayout layouts is not supported. This includes components that are built on top of SubcomposeLayout, such as lazy lists, BoxWithConstraints, TabRow, etc. To mitigate this:
- if intrinsic measurements are used to achieve 'match parent' sizing,, consider replacing the parent of the component with a custom layout which controls the order in which children are measured, making intrinsic measurement not needed
- adding a size modifier to the component, in order to fast return the queried intrinsic measurement.
at androidx.compose.ui.node.LayoutNode$NoIntrinsicsMeasurePolicy.maxIntrinsicHeight(LayoutNode.kt:464)
at androidx.compose.ui.node.LayoutNode$NoIntrinsicsMeasurePolicy.maxIntrinsicHeight(LayoutNode.kt:445)
at androidx.compose.ui.node.IntrinsicsPolicy.maxIntrinsicHeight(IntrinsicsPolicy.kt:54)
at androidx.compose.ui.node.InnerPlaceable.maxIntrinsicHeight(InnerPlaceable.kt:78)
at androidx.compose.ui.layout.MeasuringIntrinsics$DefaultIntrinsicMeasurable.measure-BRTryo0(LayoutModifier.kt:209)
at androidx.compose.foundation.layout.PaddingValuesModifier.measure-3p2s80s(Padding.kt:417)
at androidx.compose.ui.layout.MeasuringIntrinsics.maxHeight$ui_release(LayoutModifier.kt:186)
at androidx.compose.ui.layout.LayoutModifier$DefaultImpls.maxIntrinsicHeight(LayoutModifier.kt:105)
at androidx.compose.foundation.layout.PaddingValuesModifier.maxIntrinsicHeight(Padding.kt:396)
at androidx.compose.ui.node.ModifiedLayoutNode.maxIntrinsicHeight(ModifiedLayoutNode.kt:61)
at androidx.compose.ui.layout.MeasuringIntrinsics$DefaultIntrinsicMeasurable.measure-BRTryo0(LayoutModifier.kt:209)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:219)
at androidx.compose.ui.layout.MeasuringIntrinsics.maxHeight$ui_release(LayoutModifier.kt:186)
at androidx.compose.ui.layout.LayoutModifier$DefaultImpls.maxIntrinsicHeight(LayoutModifier.kt:105)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.maxIntrinsicHeight(GraphicsLayerModifier.kt:182)
at androidx.compose.ui.node.ModifiedLayoutNode.maxIntrinsicHeight(ModifiedLayoutNode.kt:61)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.maxIntrinsicHeight(DelegatingLayoutNodeWrapper.kt:165)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.maxIntrinsicHeight(DelegatingLayoutNodeWrapper.kt:165)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.maxIntrinsicHeight(DelegatingLayoutNodeWrapper.kt:165)
at androidx.compose.ui.node.OuterMeasurablePlaceable.maxIntrinsicHeight(OuterMeasurablePlaceable.kt:181)
at androidx.compose.ui.node.LayoutNode.maxIntrinsicHeight(LayoutNode.kt:1254)
at androidx.compose.foundation.layout.IntrinsicMeasureBlocks$VerticalMaxWidth$1$2.invoke(RowColumnImpl.kt:640)
at androidx.compose.foundation.layout.IntrinsicMeasureBlocks$VerticalMaxWidth$1$2.invoke(RowColumnImpl.kt:637)
at androidx.compose.foundation.layout.RowColumnImplKt.intrinsicCrossAxisSize(RowColumnImpl.kt:725)
at androidx.compose.foundation.layout.RowColumnImplKt.intrinsicSize(RowColumnImpl.kt:684)
at androidx.compose.foundation.layout.RowColumnImplKt.access$intrinsicSize(RowColumnImpl.kt:1)
at androidx.compose.foundation.layout.IntrinsicMeasureBlocks$VerticalMaxWidth$1.invoke(RowColumnImpl.kt:637)
at androidx.compose.foundation.layout.IntrinsicMeasureBlocks$VerticalMaxWidth$1.invoke(RowColumnImpl.kt:636)
at androidx.compose.foundation.layout.RowColumnImplKt$rowColumnMeasurePolicy$1.maxIntrinsicWidth(RowColumnImpl.kt:286)
at androidx.compose.ui.node.IntrinsicsPolicy.maxIntrinsicWidth(IntrinsicsPolicy.kt:50)
at androidx.compose.ui.node.InnerPlaceable.maxIntrinsicWidth(InnerPlaceable.kt:75)
at androidx.compose.foundation.ScrollingLayoutModifier.maxIntrinsicWidth(Scroll.kt:360)
at androidx.compose.ui.node.ModifiedLayoutNode.maxIntrinsicWidth(ModifiedLayoutNode.kt:51)
E/AndroidRuntime: at androidx.compose.ui.layout.MeasuringIntrinsics$DefaultIntrinsicMeasurable.measure-BRTryo0(LayoutModifier.kt:202)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:219)
at androidx.compose.ui.layout.MeasuringIntrinsics.maxWidth$ui_release(LayoutModifier.kt:167)
at androidx.compose.ui.layout.LayoutModifier$DefaultImpls.maxIntrinsicWidth(LayoutModifier.kt:92)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.maxIntrinsicWidth(GraphicsLayerModifier.kt:182)
at androidx.compose.ui.node.ModifiedLayoutNode.maxIntrinsicWidth(ModifiedLayoutNode.kt:51)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.maxIntrinsicWidth(DelegatingLayoutNodeWrapper.kt:161)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.maxIntrinsicWidth(DelegatingLayoutNodeWrapper.kt:161)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.maxIntrinsicWidth(DelegatingLayoutNodeWrapper.kt:161)
at androidx.compose.foundation.layout.MaxIntrinsicWidthModifier.calculateContentConstraints-l58MMJ0(Intrinsic.kt:147)
at androidx.compose.foundation.layout.IntrinsicSizeModifier$DefaultImpls.measure-3p2s80s(Intrinsic.kt:252)
at androidx.compose.foundation.layout.MaxIntrinsicWidthModifier.measure-3p2s80s(Intrinsic.kt:142)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.foundation.layout.PaddingModifier.measure-3p2s80s(Padding.kt:364)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116)
at androidx.compose.foundation.layout.SizeModifier.measure-3p2s80s(Size.kt:750)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.foundation.layout.SizeModifier.measure-3p2s80s(Size.kt:750)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:100)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:99)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:128)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:75)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:63)
at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:99)
at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:71)
at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1227)
at androidx.compose.foundation.layout.BoxKt$boxMeasurePolicy$1.measure-3p2s80s(Box.kt:115)
at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:43)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:219)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116)
at androidx.compose.ui.graphics.BlockGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:162)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.ui.graphics.BlockGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:162)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
E/AndroidRuntime: at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:100)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:99)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:128)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:75)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:63)
at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:99)
at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:71)
at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1227)
at androidx.compose.ui.window.AndroidPopup_androidKt$SimpleStack$1.measure-3p2s80s(AndroidPopup.android.kt:324)
at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:43)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:219)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116)
at androidx.compose.ui.node.RemeasureModifierWrapper.measure-BRTryo0(RemeasureModifierWrapper.kt:31)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:100)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:99)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:128)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:75)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:63)
at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:99)
at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:71)
at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1227)
at androidx.compose.ui.layout.RootMeasurePolicy.measure-3p2s80s(RootMeasurePolicy.kt:38)
at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:43)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:100)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:99)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:1776)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:123)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:75)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:63)
at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:99)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(LayoutNode.kt:1236)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-0kLqBqw(MeasureAndLayoutDelegate.kt:169)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.access$doRemeasure-0kLqBqw(MeasureAndLayoutDelegate.kt:38)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:207)
at androidx.compose.ui.platform.AndroidComposeView.onMeasure(AndroidComposeView.android.kt:547)
at android.view.View.measure(View.java:24530)
at androidx.compose.ui.platform.AbstractComposeView.internalOnMeasure$ui_release(ComposeView.android.kt:278)
at androidx.compose.ui.window.PopupLayout.internalOnMeasure$ui_release(AndroidPopup.android.kt:447)
at androidx.compose.ui.platform.AbstractComposeView.onMeasure(ComposeView.android.kt:265)
at android.view.View.measure(View.java:24530)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3006)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1806)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2122)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1721)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7598)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
at android.view.Choreographer.doCallbacks(Choreographer.java:790)
at android.view.Choreographer.doFrame(Choreographer.java:725)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:951)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
ad...@google.com <ad...@google.com>
an...@google.com <an...@google.com>
po...@google.com <po...@google.com> #3
Thanks for reporting! However, this works as intended. DropdownMenu
is a high level component who already puts its content in a vertically scrollable Column
. The intended usage is to put items directly in the DropdownMenu
rather than wrapping the items in any other container (such as LazyColumn
):
DropdownMenu {
itemList.forEach {
DropdownMenuItem(...)
}
}
Note that even if there was no error here regarding intrinsics here, this would have crashed anyway for using LazyColumn
inside a vertically scrollable container.
Also note there is no point in using LazyRow
rather than Row
for your DropdownMenuItem
as they only have a small number of children.
If you really need to use LazyColumn
inside DropdownMenu
(because you have, say, hundreds of items in the menu), unfortunately the only option is to copy the component implementation. This way you will be able to replace the scrollable Column
with a LazyColumn
.
po...@google.com <po...@google.com>
ap...@google.com <ap...@google.com> #4
Branch: androidx-main
commit 21fd4df8d8b26beb2574f4a18b0dd19ec0de0846
Author: Mihai Popa <popam@google.com>
Date: Thu Nov 11 18:13:00 2021
Mention Column wrapping content of DropdownMenu
Bug: 203328119
Test: n/a
Change-Id: Id487e7c36b9a8aac62c8a06978d34939e446cb75
M compose/material/material/src/androidMain/kotlin/androidx/compose/material/AndroidMenu.android.kt
M compose/material/material/src/desktopMain/kotlin/androidx/compose/material/DesktopMenu.desktop.kt
Description
Android Studio Build: :Android Studio Arctic Fox | 2020.3.1
Kotlin version:1.5.10
Steps to Reproduce:
1.Add LazyColumn inside Dropdown
Example:
LazyColumn{
itemsIndexed(itemList){ index, item ->
DropdownMenuItem(onClick = {
onSelected(index)
onExpanded(false)
},contentPadding = dropdownIconModel.contentPadding) {
LazyRow{
item { Icon(painter = painterResource(id = item.icon),
contentDescription =null,
tint = Color.Unspecified,
modifier = if (null != dropdownIconModel.iconModifier) dropdownIconModel.iconModifier!! else Modifier)
Spacer(modifier = if (null != dropdownIconModel.spacierModifier) dropdownIconModel.spacierModifier!! else Modifier.padding(horizontal =6.dp))
Text(text = item.value,maxLines = 1,overflow = TextOverflow.Ellipsis,
style = setDropdownTextStyle(dropdownIconModel) )}
}
}
}
}
Error: java.lang.IllegalStateException: Asking for intrinsic measurements of SubcomposeLayout layouts is not supported. This includes components that are built on top of SubcomposeLayout, such as lazy lists, BoxWithConstraints, TabRow, etc. To mitigate this:
- if intrinsic measurements are used to achieve 'match parent' sizing,, consider replacing the parent of the component with a custom layout which controls the order in which children are measured, making intrinsic measurement not needed
- adding a size modifier to the component, in order to fast return the queried intrinsic measurement.