Mobile filter and sort UI
10 Mobile App Filter and Sort UI Examples
A filter interface should help users express what matters, understand what is active, and recover quickly when the chosen combination produces the wrong result set.
Filtering excludes items that do not meet chosen conditions. Sorting changes the order of the remaining items. Those operations may share one sheet, but their meaning and reset behavior should remain distinct. Users need to know whether a missing item was filtered out, ranked lower, unavailable, or never present in the underlying catalog.
Mobile layouts add pressure because controls often move into drawers, sheets, menus, or horizontal chip rows. Once hidden, active constraints can become invisible. A small badge, selected chip, summary line, or result count should carry enough state back to the list so people can explain what they are seeing.
The examples below show recorded interfaces from real apps. They make useful implementation and copy choices visible, but they do not prove that one pattern improves sales, discovery, or engagement. The right controls depend on the catalog, vocabulary, data quality, and decisions users actually make.
01. Combined sheets
Separate filtering from sorting even when they share a surface.
A combined sheet can save space if each section has clear semantics and the final action explains what will change.
Calisteniapp places Clear filters beside a Filters title and starts with a Sort section set to Popularity. This is compact, but reset semantics must be exact: clearing filters should not necessarily erase the user's chosen sort unless the label and product convention say it will reset everything.
Avenza Maps uses Close, Filter, Reset all, and Sort by on the same surface. Reset all is broader than Clear filters, so the default state should be predictable and immediately reflected in every control. Closing without applying also needs a deliberate rule. Either changes apply immediately, or the interface offers a separate Apply action and discards uncommitted edits on cancel with appropriate warning only when necessary.
Keep filter groups, selected values, and sort choices accessible as controls, not styled text. Announce selected counts and disabled combinations. When controls are expensive to compute, show a loading state without losing selections and prevent an older response from replacing results after the user changes another constraint.


02. Catalog attributes
Use the attributes people recognize when comparing results.
A filter name should map to visible product or content information, not an internal database field.
Redbubble keeps the active search term animals above filter groups such as Category and Price. This connects constraints to the query they refine. If a user changes the query, the app should decide which filters remain compatible and make any removed constraint explicit rather than silently broadening the result set.
Under Armour displays Filter and Sort with selected values including Womens, White, and M. These are decision-ready product attributes. Selection controls should clarify whether categories are inclusive, whether multiple values can be combined, and whether unavailable combinations are disabled or simply return zero items.
Order groups by their likely influence on the decision, not alphabetically by schema. Preserve familiar labels used on result cards. For ranges such as price, date, duration, rating, or distance, expose boundaries, units, and inclusivity. A chosen size or availability filter may need location context when inventory differs by market.


03. Apply and results
Tell users what applying the current combination will produce.
A result count or action label can close the loop between hidden controls and the list they change.
Kitchen Stories uses Cancel, Filter, Show results, and Sort by. Show results names the destination more clearly than a generic Apply button. When available, adding the current result count to that action can help a person decide whether to narrow further before leaving the sheet.
Fivesec Health organizes filters around Meal type and includes Reset. A content library can often update immediately because combinations are cheap, but the UI still needs to preserve scroll position and avoid moving controls while counts recalculate. Selected states should remain visible after the sheet closes through chips, a summary, or a badge.
Choose one commit model. Immediate filters should update results and counts as each control changes, with Cancel meaning close rather than undo. Staged filters should keep a draft and apply together, with Cancel discarding the draft. Mixing the two leaves people unsure whether the visible list already changed.


04. Domain controls
Match controls to the structure of the content, not to a generic filter template.
The right component depends on whether users choose categories, ranges, tags, levels, or mutually dependent attributes.
Focus Tree filters by visible world-building attributes such as Biome, Grass, and Rock. These controls may be easier to recognize as visual chips or previews than as plain checkboxes. The selected design should still expose text labels and state for accessibility rather than relying on color or thumbnail differences alone.
CGX presents Filtering around content types such as Article and topics including Where do I start? and Nutrition. Editorial facets can overlap, so the interface should indicate whether selecting several terms broadens with OR or narrows with AND. Users should not need to reverse-engineer Boolean logic from disappearing results.
Use radio controls for one mutually exclusive choice, checkboxes or toggles for independent choices, chips for compact visible facets, and sliders only when continuous adjustment is meaningful. Give exact numeric entry when a range requires precision. Disable impossible options only when the reason is clear, and prefer showing counts when they help avoid dead ends.


05. Defaults and reset
Make defaults, personalization, and reset behavior inspectable.
A default sort can strongly shape what users see, so it should be stable and named rather than hidden as neutral order.
Wish labels its default order Most relevant and keeps Reset all available. Relevance is a product decision that may incorporate query match, availability, personalization, popularity, or commercial rules. The interface does not need to expose the ranking algorithm, but it should distinguish relevance from price, recency, rating, or distance.
Udemy shows Default under Sort by and separates Subcategory below. Default is only useful when users know what it means in context. A more descriptive label such as Recommended or Most relevant may make the ordering expectation clearer. If personalization changes the default, keep an alternate deterministic order where comparison or auditing matters.
Reset should return to a documented baseline, update every control, refresh the results once, and remain reversible when feasible. Preserve the search query unless the action explicitly says Clear search and filters. If filters persist across sessions, show them when the user returns and provide a clear way to remove remembered constraints.


Implementation
Represent filters as a serializable, explainable query state.
The list, controls, URL or navigation state, analytics, and backend request should agree on one filter model.
Define each facet's identifier, user-facing label, value type, combination operator, default, dependencies, and serialization. Keep draft state separate from applied state when the interface uses an Apply action. Derive badges, chips, summaries, and result requests from applied state so hidden controls cannot drift from the list.
Version persisted filter state when catalog fields change. Ignore removed values safely and tell users when a saved filter can no longer be applied. For dependent facets, such as category before size, preserve still-valid values and explicitly clear invalid ones. Never silently broaden results by dropping constraints after an API error.
Reject stale responses using request identifiers, cache compatible result sets where appropriate, and preserve the list while a small refinement loads. Distinguish zero results from network failure. Offer removal of the most restrictive constraint only when the product can identify it accurately.
Expose group headings, selected values, counts, and the commit action to assistive technology. Support large text without hiding Reset or Show results. Maintain focus after selection, announce result-count changes at a controlled pace, and make color chips, images, and range handles understandable through text labels.
Draft versus applied
Use one clear commit model and derive every summary from applied constraints.
Typed facets
Define labels, values, operators, defaults, units, and dependencies explicitly.
Safe updates
Reject stale responses and preserve the query through loading, zero results, and errors.
Remember responsibly
Restore intended filters across detail navigation and sessions with a visible reset route.
Measurement
Measure whether refinement improves the decision.
Opening a filter sheet is not success if users cannot explain or undo the result set it produces.
Track filter entry, group expansion, value selection, result-count changes, application, reset, cancellation, zero-result combinations, sort changes, item opens, return behavior, and the downstream task. Record stable facet identifiers rather than sensitive free text, and avoid logging personal health, location, or preference values without a justified data policy.
Review time to useful result, refinements per successful task, repeated resets, zero-result recovery, abandoned drafts, and discrepancies between visible chips and backend parameters. Guardrails include slower result latency, inaccessible controls, hidden remembered filters, unavailable product combinations, and ranking changes mistaken for filtering.
Review checklist
Test filters as part of the result journey.
Begin with the real query or list, change constraints, open an item, return, reset, and recover from zero results and request failure.
Use empty catalogs, very large catalogs, incompatible values, localized labels, long units, slow requests, stale data, and remembered prior selections.
- Filtering and sorting are labeled as different operations even when they share a sheet.
- The active query, scope, and applied constraints remain visible around the results.
- Control types match exclusive, multiple, range, and dependent values.
- Users can understand whether multiple selections broaden or narrow results.
- Immediate and staged application are not mixed within the same surface.
- Reset returns to a predictable baseline and does not erase the query unexpectedly.
- Zero results are distinct from loading, offline, timeout, and server failure.
- Stale responses cannot overwrite a newer filter combination.
- Selected values, counts, images, and color choices have accessible text equivalents.
- Opening and closing a result preserves the query, filters, sort, and list position.
Questions and answers
Mobile filter and sort UI questions
What is the difference between filtering and sorting?
Filtering removes items that do not meet selected conditions. Sorting changes the order of the remaining items. The controls may share a surface, but their labels, defaults, and reset behavior should remain distinct.
Should filters apply immediately?
Immediate application works when results update quickly and selections are easy to undo. Use a staged Apply or Show results action for complex or expensive combinations. Do not mix both models without making the boundary explicit.
What should Reset do?
Return every included control to a documented baseline, refresh results once, and update chips and summaries. Preserve the search query unless the control explicitly says it will clear both search and filters.
How should active mobile filters be shown after a sheet closes?
Use selected chips, a short summary, count badge, or clearly selected filter button. People should be able to explain the current result set without reopening every group.
What should happen when filters return zero results?
Keep every active constraint and the original query visible, state that the combination found no matches, and offer a precise reversible change such as removing one restrictive filter or resetting all.
How do you make filters accessible?
Use semantic control roles, group labels, text equivalents for colors and images, clear selected states, logical focus, large tap targets, and restrained announcements for changing result counts.
2,622 apps in the top charts.Ask them anything.
Compare recorded filter and sort screens to see how real apps structure facets, applied states, reset, result counts, and zero-match recovery around the content you are designing.