@@ -25,7 +25,11 @@ import androidx.compose.foundation.layout.fillMaxSize
2525import androidx.compose.foundation.layout.padding
2626import androidx.compose.foundation.layout.size
2727import androidx.compose.foundation.lazy.LazyColumn
28+ import androidx.compose.material.icons.Icons
29+ import androidx.compose.material.icons.filled.Close
2830import androidx.compose.material3.Card
31+ import androidx.compose.material3.Icon
32+ import androidx.compose.material3.IconButton
2933import androidx.compose.material3.ListItem
3034import androidx.compose.material3.Text
3135import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi
@@ -34,13 +38,15 @@ import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
3438import androidx.compose.material3.adaptive.layout.AnimatedPane
3539import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffold
3640import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole
41+ import androidx.compose.material3.adaptive.layout.PaneAdaptedValue
3742import androidx.compose.material3.adaptive.layout.PaneScaffoldDirective
3843import androidx.compose.material3.adaptive.navigation.BackNavigationBehavior
3944import androidx.compose.material3.adaptive.navigation.NavigableListDetailPaneScaffold
4045import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldPredictiveBackHandler
4146import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator
4247import androidx.compose.runtime.Composable
4348import androidx.compose.runtime.rememberCoroutineScope
49+ import androidx.compose.ui.Alignment
4450import androidx.compose.ui.Modifier
4551import androidx.compose.ui.graphics.Color
4652import androidx.compose.ui.tooling.preview.Preview
@@ -118,6 +124,7 @@ fun SampleNavigableListDetailPaneScaffoldFull() {
118124 // [START android_compose_adaptivelayouts_sample_list_detail_pane_scaffold_full]
119125 val scaffoldNavigator = rememberListDetailPaneScaffoldNavigator<MyItem >()
120126 val scope = rememberCoroutineScope()
127+ val backNavigationBehavior = BackNavigationBehavior .PopUntilScaffoldValueChange
121128
122129 NavigableListDetailPaneScaffold (
123130 navigator = scaffoldNavigator,
@@ -137,10 +144,28 @@ fun SampleNavigableListDetailPaneScaffoldFull() {
137144 }
138145 },
139146 detailPane = {
140- AnimatedPane {
141- // Show the detail pane content if selected item is available
142- scaffoldNavigator.currentDestination?.contentKey?.let {
143- MyDetails (it)
147+ Column {
148+ // Allow users to dismiss the detail pane. Use back navigation to
149+ // hide an expanded detail pane.
150+ if (scaffoldNavigator.scaffoldValue[ListDetailPaneScaffoldRole .Detail ] == PaneAdaptedValue .Expanded ) {
151+ // Material design principles promote the usage of a right-aligned
152+ // close (X) button.
153+ IconButton (
154+ modifier = Modifier .align(Alignment .End ).padding(16 .dp),
155+ onClick = {
156+ scope.launch {
157+ scaffoldNavigator.navigateBack(backNavigationBehavior)
158+ }
159+ }
160+ ) {
161+ Icon (Icons .Default .Close , contentDescription = " Close" )
162+ }
163+ }
164+ AnimatedPane {
165+ // Show the detail pane content if selected item is available
166+ scaffoldNavigator.currentDestination?.contentKey?.let {
167+ MyDetails (it)
168+ }
144169 }
145170 }
146171 },
0 commit comments