Skip to content

Commit 209a6ae

Browse files
Filter chip dropdown menu
1 parent 68fef6e commit 209a6ae

File tree

1 file changed

+88
-0
lines changed
  • compose/snippets/src/main/java/com/example/compose/snippets/components

1 file changed

+88
-0
lines changed

compose/snippets/src/main/java/com/example/compose/snippets/components/Menus.kt

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,34 @@
1616

1717
package com.example.compose.snippets.components
1818

19+
import androidx.compose.foundation.layout.Arrangement
1920
import androidx.compose.foundation.layout.Box
2021
import androidx.compose.foundation.layout.Column
22+
import androidx.compose.foundation.layout.Row
2123
import androidx.compose.foundation.layout.fillMaxSize
2224
import androidx.compose.foundation.layout.fillMaxWidth
2325
import androidx.compose.foundation.layout.padding
26+
import androidx.compose.foundation.layout.wrapContentSize
2427
import androidx.compose.material.icons.Icons
28+
import androidx.compose.material.icons.automirrored.filled.DirectionsBike
29+
import androidx.compose.material.icons.automirrored.filled.DirectionsRun
30+
import androidx.compose.material.icons.automirrored.filled.DirectionsWalk
2531
import androidx.compose.material.icons.automirrored.outlined.Help
2632
import androidx.compose.material.icons.automirrored.outlined.OpenInNew
2733
import androidx.compose.material.icons.automirrored.outlined.Send
34+
import androidx.compose.material.icons.filled.ArrowDropDown
35+
import androidx.compose.material.icons.filled.Check
36+
import androidx.compose.material.icons.filled.Hiking
2837
import androidx.compose.material.icons.filled.MoreVert
38+
import androidx.compose.material.icons.filled.Tune
2939
import androidx.compose.material.icons.outlined.Feedback
3040
import androidx.compose.material.icons.outlined.Info
3141
import androidx.compose.material.icons.outlined.Person
3242
import androidx.compose.material.icons.outlined.Settings
3343
import androidx.compose.material3.Button
3444
import androidx.compose.material3.DropdownMenu
3545
import androidx.compose.material3.DropdownMenuItem
46+
import androidx.compose.material3.FilterChip
3647
import androidx.compose.material3.FloatingActionButton
3748
import androidx.compose.material3.HorizontalDivider
3849
import androidx.compose.material3.Icon
@@ -76,6 +87,9 @@ fun MenusExamples() {
7687
Button(onClick = { currentExample = { DropdownMenuWithDetails() } }) {
7788
Text("Dropdown menu with sections and icons")
7889
}
90+
Button(onClick = { currentExample = { DropdownFilter() } }) {
91+
Text("Menu for applying a filter, attached to a filter chip")
92+
}
7993
}
8094
}
8195
}
@@ -212,3 +226,77 @@ fun DropdownMenuWithDetails() {
212226
fun DropdownMenuWithDetailsPreview() {
213227
DropdownMenuWithDetails()
214228
}
229+
230+
@Composable
231+
fun DropdownFilter(modifier: Modifier = Modifier) {
232+
Row(
233+
modifier = modifier
234+
.padding(16.dp)
235+
.wrapContentSize(unbounded = true),
236+
horizontalArrangement = Arrangement.spacedBy(8.dp),
237+
verticalAlignment = Alignment.CenterVertically
238+
) {
239+
Icon(Icons.Default.Tune, "Filters")
240+
FilterChip(selected = false, onClick = { /*TODO*/ }, label = { Text("Time")})
241+
DropdownFilterChip()
242+
FilterChip(selected = false, onClick = { /*TODO*/ }, label = { Text("Wheelchair accessible")})
243+
}
244+
}
245+
246+
// [START android_compose_components_dropdownfilterchip]
247+
@Composable
248+
fun DropdownFilterChip(modifier: Modifier = Modifier) {
249+
var isDropdownExpanded by remember { mutableStateOf(false) }
250+
var selectedChipText by remember { mutableStateOf<String?>(null) }
251+
Box(modifier) {
252+
FilterChip(
253+
selected = selectedChipText != null,
254+
onClick = { isDropdownExpanded = !isDropdownExpanded },
255+
label = { Text(if(selectedChipText == null) "Type" else "$selectedChipText") },
256+
leadingIcon = { if(selectedChipText != null) Icon(Icons.Default.Check, null) },
257+
trailingIcon = { Icon(Icons.Default.ArrowDropDown, null) },
258+
)
259+
DropdownMenu(expanded = isDropdownExpanded,
260+
onDismissRequest = { isDropdownExpanded = !isDropdownExpanded }) {
261+
DropdownMenuItem(
262+
text = { Text("Running") },
263+
leadingIcon = { Icon(Icons.AutoMirrored.Default.DirectionsRun, null) },
264+
onClick = {
265+
selectedChipText =
266+
if(selectedChipText == "Running") null else "Running"
267+
}
268+
)
269+
DropdownMenuItem(
270+
text = { Text("Walking") },
271+
leadingIcon = { Icon(Icons.AutoMirrored.Default.DirectionsWalk, null) },
272+
onClick = {
273+
selectedChipText =
274+
if(selectedChipText == "Walking") null else "Walking"
275+
}
276+
)
277+
DropdownMenuItem(
278+
text = { Text("Hiking") },
279+
leadingIcon = { Icon(Icons.Default.Hiking, null) },
280+
onClick = {
281+
selectedChipText =
282+
if(selectedChipText == "Hiking") null else "Hiking"
283+
}
284+
)
285+
DropdownMenuItem(
286+
text = { Text("Cycling") },
287+
leadingIcon = { Icon(Icons.AutoMirrored.Default.DirectionsBike, null) },
288+
onClick = {
289+
selectedChipText =
290+
if(selectedChipText == "Cycling") null else "Cycling"
291+
}
292+
)
293+
}
294+
}
295+
}
296+
// [END android_compose_components_dropdownfilterchip]
297+
298+
@Preview
299+
@Composable
300+
private fun DropdownFilterPreview() {
301+
DropdownFilter()
302+
}

0 commit comments

Comments
 (0)