1616
1717package com.example.compose.snippets.components
1818
19+ import androidx.compose.foundation.layout.Arrangement
1920import androidx.compose.foundation.layout.Box
2021import androidx.compose.foundation.layout.Column
22+ import androidx.compose.foundation.layout.Row
2123import androidx.compose.foundation.layout.fillMaxSize
2224import androidx.compose.foundation.layout.fillMaxWidth
2325import androidx.compose.foundation.layout.padding
26+ import androidx.compose.foundation.layout.wrapContentSize
2427import 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
2531import androidx.compose.material.icons.automirrored.outlined.Help
2632import androidx.compose.material.icons.automirrored.outlined.OpenInNew
2733import 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
2837import androidx.compose.material.icons.filled.MoreVert
38+ import androidx.compose.material.icons.filled.Tune
2939import androidx.compose.material.icons.outlined.Feedback
3040import androidx.compose.material.icons.outlined.Info
3141import androidx.compose.material.icons.outlined.Person
3242import androidx.compose.material.icons.outlined.Settings
3343import androidx.compose.material3.Button
3444import androidx.compose.material3.DropdownMenu
3545import androidx.compose.material3.DropdownMenuItem
46+ import androidx.compose.material3.FilterChip
3647import androidx.compose.material3.FloatingActionButton
3748import androidx.compose.material3.HorizontalDivider
3849import 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() {
212226fun 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