Sort and Filter

Sorting and filtering are two ways of refining the results from a long list of objects. These two features help users navigate through a big amount of data and find the specific data they want to focus on easier.

Typically, a full-screen dialog on compact or a modal dialog for medium and expanded screens is used to display all filter controls. Sorting and filtering are integrated when both features are available. Users can tap on “Reset” to go back to the complete list of results in default order.

Filter controls on a compact (left) and expanded screen (right)
Filter controls on a compact (left) and expanded screen (right)

Usage

Do

Use a filter when there is a long list of data with several properties and users want to see part of the list by narrowing down the properties.

Don't

Don’t use a filter when the list of data has just one type of property.

Anatomy

On compact screens, a full-screen dialog is used to display the sort and filter pattern.

On medium and expanded screens, such as tablets, a modal dialog is used instead of a full-screen dialog.

The sort and filter dialog is made up of reusable and modular sections. Each section consists of different types of controls or form cells.

A. App Bar

The app bar contains a page title and actions related to the page. In a filter dialog, the page title is usually a filter or sort and filter. The “Close” icon on the left closes the dialog without applying changes. By tapping on “Reset,” users can undo any changes made to the filter and restore the default setting of the selected filter or sort option.

B. Sort Section (Optional)

When a sort feature is available, it appears as the first section in the dialog. The sort by section is used for sorting the results by a certain logic. The default sorting method is preselected.

C. Filter Section

The filter section provides controls for users to set up filtering criteria. Types of controls include chips, selection controls, sliders, etc.

D. Footer Section

The footer area contains the “Show n Results” button. The n indicates the number of items with the selected filters applied.

E. Filter Feedback (Optional)

The filter feedback bar can be used to provide more context to the filtered results, and allow users to quickly modify the filter options on screen.

Anatomy of sort and filter dialog
Anatomy of sort and filter dialog

Behavior and Interaction

Sort and Filter

Sort

Sort allows users to view the results in the order they desire.

Sort interaction
Sort interaction

Filter

Filter allows users to narrow down the results according to certain criteria.

Filter interaction
Filter interaction

Trigger

The filter dialog is triggered by tapping on the filter icon on the app bar. Based on the priority of actions, if there is no space in the app bar, the filter can be placed in the “More” menu on mobile. On tablet, it should be visible from the app bar.

Sort and filter placed in more menu
Sort and filter placed in more menu

Actions

The filter dialog follows the standard full-screen dialog structure: a discard action on the left, and a confirmation action on the right.

Close Icon

The “Close” icon closes the dialog without having to commit. When nothing has been entered by the user, the dialog is closed directly. If there is unsaved input, a confirmation dialog pops up asking users to confirm their action.

“Show n Results” Button

The “Show n Results” button confirms the selections users have made and closes the dialog. The list is refreshed with the new filter settings.

Close interaction with confirmation dialog
Close interaction with confirmation dialog

Navigation

The navigation within the filter dialog is normally to drill down into a value list.

The title of the new screen should be consistent with the label in the filter cell. Replace the “Close” icon with the “Back” icon to navigate back. The drill down page has no “Apply” button, as all changes here are autosaved. If the search function is available, show the “Search” icon in the app bar.

Navigation within the filter dialog
Navigation within the filter dialog

Variations

Choice Chip Form Cell – Single Selection

The choice chip form cell is recommended for single selection sort. This allows users to prioritize the list by one criterion. A default value should be selected for sort.

Choice chip form cell
Choice chip form cell

Sort By Multiple Criteria

For more complex sorting needs, use the sort by multiple criteria control. It allows user to select multiple sorting criteria and set the order in which these criteria will be applied to a list. See sort by multiple criteria for more information.

Sort by multiple criteria
Sort by multiple criteria

Select

Chip Form Cell – Single or Multiple Selection

Use the chip form cell when users need to make selections from no more than eight pre-defined values. Use the choice chip form cell for a single selection. Use filter chip form cell for multiple selections. If the number of values is more than eight, or the text of the value is too long to display within the chips, use a list picker form cell instead.

Chip form cell
Chip form cell

List Picker Form Cell – Single or Multiple Selection

A list picker form cell is used when the values are long text or the number of values is more than eight under one filter category. It is also used when the number of values is dynamic or unpredictable. With a list picker form cell, the user is able to search and select the data entry.

The selection on a list can be either a single selection (use radio buttons) or a multiple selection (use checkboxes).

If a list is multi selection, the selections can be grouped in a selected grouping to enable users to deselect without having to scroll down a large list.

List picker form cell
List picker form cell

Switch Form Cell

Use a switch form cell when the property has only two mutually exclusive states: on and off.

Switch form cell
Switch form cell

Data Range

Slider Form Cell

A slider form cell enables the user to set the maximum value within a specified numerical range.

Slider form cell
Slider form cell

Time Picker Form Cell

A time picker form cell is used to select time based data.

A date picker is used to set a specific date or time. A time duration picker is used to set a duration.

Time picker form cell
Time picker form cell

Reset

The “Reset” button is nested in the top app bar that is located at the top of the dialog. The “Reset” button clears the applied filters and restores the default value of the selected sort option.

"Reset" button in top app bar

Filter Feedback

The filter feedback bar helps user understand the results of filter. Due to the complexity of the dataset or the number of values, it is recommended to give users feedback.

The filter feedback bar can be used to display the applied filter options and fast filters. This provides more detailed information. Refer to filter feedback bar to learn more about this component.

Filter feedback bar
Filter feedback bar

Resources

Development: SortAndFilterDialogFragment

SAP Fiori for iOS: Sort and Filter

Switches

The switch control mimics a physical switch that allows users to turn on/off individual settings, such as personalization or display settings. When users change a switch to “on”, they expect an instantaneous action as soon as the switch changes state.

Switch on mobile (left) and on tablet (right)
Switch on mobile (left) and on tablet (right)

Usage

Do
  • Use switches in a switch form cell only.
  • Use switches to control the availability of related UI elements on the current screen.
Don't
  • Don’t use switches for selecting states other than on and off.
  • Don’t use switches without a form cell container.

Anatomy

A. Text Label

The text label describes the object this switch is controlling.

B. Helper Text

The helper text provides additional information about the form cell. 

C. Switch

The switch control is located on the right side of the cell.

Anatomy of switch form cell
Anatomy of switch form cell

Behavior and Interaction

States

Enabled State

Each switch form cell is one touch target. To change the state of a switch, the user can tap anywhere within the cell to toggle.

Enabled switch form cells
Enabled switch form cells

Disabled State

When a switch is disabled, apply 50% opacity to the whole cell. Disabled cells are not interactive.

Disabled switch form cells
Disabled switch form cells

Error State

Use an error message only when necessary. Don’t distract users with unimportant information. For page level feedback, use a snackbar instead. 

The error message should be concise. We recommend using one line of text for the error message. 

By default, there is no error message. When the error message is triggered, insert the message with padding below the label text before the divider line if used. The content under it will be pushed down. 

Switch form cell with error message
Switch form cell with error message

Adaptive Design

The full width of switch form cells adapts to different screen sizes. 

Switch form cell on mobile (top) and on tablet (bottom)
Switch form cell on mobile (top) and on tablet (bottom)

Resources

Development: FioriSwitch, SwitchFormCell

SAP Fiori for iOS: Switches

Material Design: Switches

Checkboxes

A checkbox lets the user set a binary value on the option associated with the control. When the user taps the checkbox, it toggles between checked and unchecked. Checked means that the state described by the checkbox text applies, or that the item has been chosen. Within a group of checkboxes, each checkbox can be checked or unchecked. This allows users to select multiple options from one group.

Usage

Do
  • Use checkboxes for multi-select. Each option in the group can be selected independently of each other
  • Use checkboxes when only one option can be selected or deselected, for example, to accept terms of use. Use it only if the meaning is obvious (single checkbox).
  • Use checkboxes to display all available options directly to users.
Don't
  • Don’t use checkboxes for single selection. Use radio buttons instead.
  • Don’t use checkboxes if you want to offer two options for a “yes/no” or “on/off” type of decision. Use a switch control instead.

Anatomy

A. Property Name

A set of checkboxes is used to show all available values for a certain property. The property name should be displayed at the top. If the whole page is used to display available values, display the property name as the title in the app bar.

B. Checkbox Cell

A checkbox followed by a text value forms one checkbox cell. Each available option has its own cell. Display the checkbox cells in a meaningful sequence, for example, alphabetical sequence for names.

C. Cell Group

Checkbox cells can be grouped into categories. Each category has a header showing the name of the group.

Anatomy of checkboxes
Anatomy of checkboxes

Behavior and Interaction

The user taps a checkbox to toggle the state of the checkbox between checked and unchecked. Each checkbox cell is one touch target. When a specific option is disabled, apply 50% opacity to that checkbox cell. Disabled options are not interactive.

Enabled checkbox cells
Enabled checkbox cells
Disabled checkbox cells
Disabled checkbox cells

Resources

Development: CheckBox, MaterialCheckBox

Material Design: Checkboxes

Header

A header is a section title that represents the content of the section. It is used to group content on a screen into reasonable sections, making it easier for users to consume the information. Headers should be brief and concise so that users can quickly identify what each content section is about.

Section header in forms: mobile (left) and tablet (right)
Section header in forms: mobile (left) and tablet (right)

Anatomy

A. Header

The section title represents the content of the section.

B. Button (Optional)

The button enables user to perform relevant actions to the section. The button can either be a text button or an icon button.

Anatomy of a section header
Anatomy of a section header

Variations

Section Header

A section header represents the content of a section. It uses a simple and short word or phrase to convey the purpose of the section.

Section header on mobile
Section header on mobile

Section Header with Button

A section header can contain an action button associated with the content of the section. The button can either be a text button or icon button, For example, the attachment header contains an “Add” button to allow users to add attachments. To learn more about that workflow, refer to the Attach article.

Section header with a text button
Section header with a text button
Section header with an icon button
Section header with an icon button

Sliders

A slider is a control that enables the user to adjust single values within a specified numerical range.

Sliders on mobile (left) and on tablet (right)
Sliders on mobile (left) and on tablet (right)

Anatomy

Slider Control

A. Container

A slider control always stays in a container with reserved paddings to provide enough touch area for users to operate the slider.

B. Track

A slider controls has a track representing the selectable range. The part of track on the left side of the thumb is selected. The part of track on the right side of the thumb is unselected.

C. Thumb

Thumb indicates the selected value on the track. Users can drag the thumb along the track to adjust their selection.

Anatomy of slider control
Anatomy of slider control

Slider Form Cell

A. Property Name

Property name is a label text that identifies the purpose of the slider.

B. Selected Value

selected value is a text string that reflects the value being selected.

C. Slider

A slider is the control for users to select the value. By default, the minimum value is displayed at the left of the slider control, and maximum value on the right. This minimum and maximum value labels can be changed to icons or other labels that best represent the type of value this slider is controlling.

D. Helper Text

Provides additional information about the form cell. 

Anatomy of slider form cell
Anatomy of slider form cell

Variations

Depending on the use case, different content can be shown/hidden in a slider form cell.

Please choose the format that best serves the use case. Below are some examples.

Non-Editable Slider Form Cell 

When the label text and value text can fit in one row with at least 16dp horizontal padding in between, display them in one line to save vertical screen space. 

When the label text and value text can’t fit on the same line, the selected value is moved to the next line.

Non-editable slider form cell with short label (top) and with long label (bottom)
Non-editable slider form cell with short label (top) and with long label (bottom)

Editable Slider Form Cell 

This variation allows users to set the slider to an exact value by typing in addition to dragging the slider thumb. The selected value text becomes an input field at the right side of the slider control, replacing the maximum value. This variation is useful when users want to select a specific value. We recommend adding the minimum and maximum values to the slider label so that users know the exact range they can choose from.

Editable slider form cell
Editable slider form cell

Slider Form Cell with Icons 

In this use case, the actual value of selection is not important for users to see. Therefore, the value text can be removed. This is also an example of using icons instead of minimum and maximum value. 

Slider form cell with icons
Slider form cell with icons

Grouped Sliders

In general, each slider cell is stand-alone. Group sliders together only when all of them contribute to one attribute, for example, when red, green, and blue define one color. You can use an icon or short to label each row. Text labels should be as concise as possible. Within one group, use the row with the longest label or shortest slider as a reference and vertically align the other rows to it.

Three grouped slider form cells
Three grouped slider form cells
Three ungrouped slider form cells controlling different types of volume
Three ungrouped slider form cells controlling different types of volume

Behavior and Interaction

States

Error State

Use validation messages only if necessary, for example, to show error messages or direct feedback for this control. Do not distract users with unimportant information. For page level feedback, use a snackbar instead.

The validation message should be concise. One line of text is recommended for the validation message.

By default, there is no validation message. When the validation message is triggered, insert the message with padding below the 48dp slider control area before the divider line if used. The content under the slider form cell will be pushed down.

Slider form cell with error message
Slider form cell with error message

Adaptive Design

The full width of slider form cells adapts to different screen sizes.

Slider on mobile (top) and on tablet (bottom)
Slider on mobile (top) and on tablet (bottom)

Resources

Development: FioriSlider, SliderFormCell

SAP Fiori for iOS: Slider Form Cell

Material Design: Sliders

Key Value Cell

The key value cell is a table view cell that fits inside the table view container. It is ideal for displaying sets of data that also need to display their labels.

Key value cell on mobile (left) and on tablet (right)
Key value cell on mobile (left) and on tablet (right)

Usage

Do

Use a key value cell to display a piece of information with its label.

Don't
  • Don’t use the key value cell to display an image.
  • Don’t use the key value cell to display text content that is not related to a property.

Anatomy

A. Key Label

This is the property name that identifies what the value is representing.

B. Value

Value is used to show the data for a property. This could be pre-defined values or input created by users. If there is a specific action associated with it, for example, phone number or email address, the value should be a button color.

C. Expand/Collapse Icon

When the value text exceeds six lines, it’s truncated at the end of the sixth line, and an expand icon shows up. Users can tap the expand icon to view the rest of the value text. When the cell is expanded, a collapse icon replaces the expand icon.

Key value cell anatomy
Key value cell anatomy

Variations

Key Value Cell – Plain Text 

Use this variant if the value is plain text within six lines.  

Key Value Cell – Collapse/Expand 

Key value cells have a maximum height of six lines of value text. If the content is more than six lines, it is truncated at the end of the sixth line and an expand icon appears on the top right corner of the cell. Users can tap to expand/collapse the cell to view all the text. 

Expand and collapse behavior
Expand and collapse behavior

Key Value Cell – Actionable Text 

In general, the key value cell is for display only. Tap to drill down is possible, though it depends on the context. If the value displayed has a specific action associated with it, for example, phone number or email address, tapping on the cell would trigger that action, for example, call that phone number or send an email to that address. 

Blue text indicates an actionable item
Blue text indicates an actionable item

Adaptive Design

Mobile

On mobile, always display the key value cell as one full-width column.

A list of key value cells on phone
A list of key value cells on phone

Tablet

On tablet, key value cells can be displayed as one or two columns. 

One-Column Layout

A list of key value cells on tablet
A list of key value cells on tablet

Two-Column Layout

Key value cells can be displayed in a two-column layout on tablet devices to take advantage of screen space. Only use the two-column layout when the cells in this group have relatively consistent height among all the rows. This layout is only recommended for a group of items with short value text. Avoid having expandable key value cells in a two-column layout.

Key value cells in two-column layout on tablet
Key value cells in two-column layout on tablet

Resources

Development: FioriKeyValueCell, KeyValueCell

SAP Fiori for iOS: Key Value Table View Cell

Search

A search involves the following: activating the search field, typing a search query, and displaying the search results. 

Persistent search on map
Persistent search on map

Usage

The search pattern is used to help users find information quickly within an app. Adding search suggestions provides them with past searches and search suggestions.

Behavior and Interaction

A search is shown as a persistent search or expandable search. It is usually accessed from the top-level user navigation and is used to find information that is buried deep within an app’s information architecture. 


Activation

When the user taps on the search icon, the text field activates, displaying the blinking cursor along with the keyboard and a search suggestion that shows under the search bar.

Input

As the user types, search suggestions are further refined to reflect the user’s keyboard inputs.

Results

When the user enters a query or selects one of the search suggestions, they are taken to the search results.

Expandable search flow
Expandable search flow

Search Suggestions

Display a list of search suggestions when the search bar is activated.

Past Searches

Before the user begins typing, a list of past searches displays on search suggestions.

Input

As the user begins typing, the search suggestion dialog displays a list of possible suggested results based on what the user’s inputs.

Navigation

Tapping on one of the suggestions navigates to that item detail. If the user taps on the back arrow, they are taken back to the default view.

Expandable search showing search suggestions
Expandable search showing search suggestions

Resources

Development: FioriSearchView

SAP Fiori for iOS: Search Bar

Material Design: Search

Related Components/Patterns: Search (UI Component)

Create

The create pattern presents users a form used to generate new objects and object details. It is typically triggered by “Create” or “Add” actions. The create pattern is presented in a full-screen dialog on mobile devices or modal dialog on tablets. In the dialog, users are able to input the information related to the object they are creating.

Create dialog on mobile (left) and tablet (right) devices
Create dialog on mobile (left) and tablet (right) devices

Anatomy

The create pattern follows the basic structure of a full-screen dialog. Based on object type and object detail, different types of data entry components are used. Hierarchy of data entry components should reflect the hierarchy of object detail.

A. App Bar

The app bar contains:

  • Screen title specifies the object it’s creating.
  • “Close” icon on the left to discard the new object without saving.
  • “Save” button on the right to generate the new object based on information filled in this dialog.

B. Key Information

The data points that define the foundation of this new object are considered key information. This contains properties that help users to identify the object, such as the title of a new task. Usually, at least one of the key information is required for creating the object. The key information should be located at the top of the dialog so users can start with this first. In some cases, key information is pre-populated, and the user may or may not be able to edit these values. The type of information that appears in the key information section differs depending on the use case.

C. Property

Property details appear after the key information section to gather additional information for the object. In general, one form cell is used for one property. Cells can be grouped together based on the information hierarchy of the object. Choose the form cell that best serves the data type.

D. Accessory

The accessory area is at the bottom of the dialog. It includes elements such as notes and attachments.

Create dialog anatomy
Create dialog anatomy

Control Types

Text Input

Simple Property Form Cell

Simple property form cell is best for gathering freestyle text input value for a certain property. The value is expected to be relatively short and without line breaks.

Simple property form cell in a create dialog
Simple property form cell in a create dialog

Note Form Cell

Note form cell is best for gathering long freestyle text input, such as note or comment. Users can use line breaks as they want.

Note form cell in a create dialog
Note form cell in a create dialog

Select

Chip Form Cell – Single or Multiple Selection

Use a chip form cell when users need to make selections from no more than eight predefined values. Use a choice chip form cell for single selection. Use a filter chip form cell for multiple selection. If the number of values is more than eight, or the text of value is too long to display within chips, use a list picker form cell instead.

Chip form cell in a create dialog
Chip form cell in a create dialog

List Picker Form Cell– Single or Multiple Selection

A list picker form cell is used when the property has long values or more than eight possible values. It is also used when the number of values is dynamic or unpredictable. With a list picker form cell, the user is able to search and select the data entry.

The selection on a list can be either single selection (use radio buttons) or multiple selection (use checkboxes), based on the definition of the property.

If a list is multi selection, the selections can be grouped in a “Selected” grouping to enable users to deselect without having to scroll down a large list.

List picker form cell in a create dialog
List picker form cell in a create dialog

Switch Form Cell

Use a switch form cell when the property has only two mutually exclusive states—on and off.

Switch form cell in a create dialog
Switch form cell in a create dialog

Data Range

Slider Form Cell

A slider form cell enables the user to set the maximum value within a specified numerical range.

Slider form cell in a create dialog
Slider form cell in a create dialog

Time Picker Form Cell

time picker form cell is used to select time based data.

date picker is used to set a specific date or time. A time duration picker is used to set a duration.

Time picker form cell in a create dialog
Time picker form cell in a create dialog

Attachment

An attachment is usually located at the end of the create pattern so that this section can descend freely as the user attaches more files.

Attachment in a create dialog
Attachment in a create dialog

Behavior and Interaction

Trigger

The create pattern is triggered when users tap on an “Add” icon or create/add menu options. The trigger should state clearly what object it is going to create.

The create flow triggered by the create menu in app bar
The create flow triggered by the create menu in app bar

Actions

“Close” Icon

The “Close” icon closes the dialog without having to commit. When nothing has been entered by the user, the dialog is closed directly. If there is unsaved input, a confirmation dialog shows up asking users to confirm their action.

“Save” Button

The “Save” button creates the object based on user input. By default, display the newly created object’s detail page after save so that users can see their changes.

If there’s no individual detail page of the object being created, show the parent page after saving, for example, taking reading for an equipment. Ideally, scroll to the part where user’s new changes are reflected.

Closing a create dialog with unsaved changes triggers a confirmation dialog
Closing a create dialog with unsaved changes triggers a confirmation dialog

Navigation

The navigation within the create pattern is commonly used to drill down from a list picker form cell into a value list. The animation transition of the navigation should be a push to the next screen.

The app bar title in the new screen should be consistent with the label in the list picker form cell. Replace the “Close” icon with the “Back” icon to navigate back. There is no “Apply” button in the drill down page due to all changes being auto-saved. If the search function is available, use the expandable search and show the “Search” icon in the app bar.

Navigation from a list picker form cell inside a create dialog
Navigation from a list picker form cell inside a create dialog

Resources

SAP Fiori for iOS: Create & Edit

Search

Search is used to find and access content globally within an app or locally within any given screen. There are two variations of search, persistent and expandable search. The variation used is determined by its prominence within the app.

Search in portrait orientation (left) and landscape orientation (right)
Search in portrait orientation (left) and landscape orientation (right)

Anatomy

A. Icon Area

In the non-active state, the icon area can be interactive or non-interactive, depending on the app team’s needs. During the active state, the icon area becomes the primary form of navigation.

B. Placeholder Text

The placeholder text should state the type of content that can be searched. Wording such as “Search for Tools” and “Search for Products” are good examples that help the user more confidently perform a search.

C. Scan 

If the user taps on the “scan” icon, this triggers a full-screen dialog that displays the scan view. Users may scan a barcode or a QR code to search for an object quickly.

D. Voice 

If the user taps on the “voice” icon, this triggers a modal dialog displaying the voice input. Users can use the device’s built-in microphone to pronounce their search.

Anatomy of the search
Anatomy of the search

Variations

The type of search is determined by how prominent search is within the app.


Persistent Search

Persistent search is characterized as a highly visible and highly tappable search text field that is commonly found towards the top of the screen. Use persistent search if searching is the primary function of the app.

Persistent search on map
Persistent search on map


Expandable Search

Expandable search is presented as a magnifying icon in the app bar that, when tapped, discloses the search text field and any supplemental search controls. Use expandable search if searching is not the primary function of the app.

Expandable search on app bar
Expandable search on app bar

Resources

Development: FioriSearchView

SAP Fiori for iOS: Search Bar

Material Design: Search

Related Components/Patterns: Search (Pattern), List Picker

Attachment Form Cell

The attachment form cell is usually part of the create or editing work flow, located at the end of the form. All the attached files should be associated with a certain business object.

In general, users can only add/delete attachments in edit mode. After the changes have been saved, users can view the attached files in view mode, but can’t make any changes. This prevents users from accidentally making changes to attachments. It can also be used to give role-based access, as some users may not be allowed to edit.

Adding attachments on compact (left) and medium and expanded screens (right)
Adding attachments on compact (left) and medium and expanded screens (right)

Anatomy

Edit Mode

In edit mode, the attachment form cell consists of an attachment header and list of attached files

Attachment Header

A. Text Label

Text label shows the name of this section. Use “Attachments” as the default label. The label can be customized based on context. For example, in the process of creating an expense report, the attachment section can be labeled as “Receipts”.

B. Counter

This shows the number of attachments

C. “Add” Button

Tapping the “Add” button triggers the workflow of adding an attachment.

Anatomy of attachment headers in edit mode
Anatomy of attachment headers in edit mode


Attachment List

The attachment list shows the basic information of each attached item. Each list item consists of:

A. Thumbnail

Provides a preview image of the attached file when available; otherwise, display the icon for that file type.

B. File Name

A text string displays the file name with file type extension. The file name can wrap to two lines. If the name is longer than the allocated space, truncate it in the middle to keep the file type visible.

C. File Information (Optional)

The subheading can be used to display additional information such as file size or description.

D. Attribute (Optional)

The attribute can be used to display short bits of information such as a timestamp or file size.

Delete Icon

Tapping the “Delete” icon deletes the item directly.

Anatomy of attachment lists in edit mode
Anatomy of attachment lists in edit mode


View Mode

In view mode, attachments can be displayed in list view or grid view.

Attachment Header

The attachment header in view mode has the same structure as in edit mode, except replacing the “Add” button with view switcher icons.

A. Text Label

Text label shows the name of this section. Use “Attachments” as the default label. The label can be customized based on context. For example, in the process of creating an expense report, the attachment section can be labeled as “Receipts”.

B. Counter

The counter shows the number of attachments.

C. View Switcher Icon

This icon allows users to switch between the two type of views. Use the grid view icon when attachments are displayed in list view. Use the list view icon when attachments are displayed in grid view.

Anatomy of attachment headers in view mode
Anatomy of attachment headers in view mode


List View

In list view, each attached file is displayed as an object cell with:

A. Thumbnail

Provides a preview image of the attached file when available; otherwise, display the icon for that file type.

B. File Name

A text string displays file name with file type extension. The file name can wrap to two lines. If the name is longer than the allocated space, truncate it in the middle to keep the file type visible.

C. File Information (Optional)

The subheading can be used to display additional information such as file size or description.

D. Attribute (Optional)

The attribute can be used to display short bits of information such as a timestamp or file size.

Anatomy of attachment lists in view mode
Anatomy of attachment lists in view mode


Grid View

In grid view, each attached file is displayed as an image cell:

A. Container

The attachment container defines the size and boundary of each cell and is scaling based on the screen size. All attachment items have the same width and height within an attachment form cell.

B. Thumbnail

Provides a preview image of the attached file when available; otherwise, display the icon for that file type.

C. File Name

The file name helps users identify the file. A text string displays the file name with file type extension. The file name can wrap to two lines.

D. File Information (Optional)

The subheading can be used to display additional information such as file size or description. One line is allocated for the file information, after which the text truncates.

E. Attribute (Optional)

The attribute can be used to display short bits of information such as a timestamp or file size.

Anatomy of attachments in grid view
Anatomy of attachments in grid view

Behavior and Interaction

To add an attachment, users have to tap on the “Add” button.

On compact screens, this triggers a bottom sheet, listing out all the possible ways to add a file supported by this app.

Opening a bottom sheet on a compact screen
Opening a bottom sheet on a compact screen

On medium and expanded screens, a menu is used instead of bottom sheet.

Opening a menu on an expanded screen
Opening a menu on an expanded screen

Users select from the menu based on the location or type of file they want to add. The file selection process is powered by Android system’s default features. From here, users would be led to other apps, such as the camera app if they select “Take Photo”. The details of this process might differ based on device brand and system version.

After users confirm their selection, they are led back to the page where the add action was triggered. The newly added item is shown at the bottom of the list, and the number of attachments is updated.

Each cell has two touch targets: the “Delete” button, and outside the delete button. Users can directly delete one item by tapping the “Delete” button. Users can view the file by tapping outside the “Delete” button. The preview of the file is not handled inside the SAP Fiori app. It is handled by the Android system. Apps that support this file type would be launched to view the file.

Deleting an attachment from the list
Deleting an attachment from the list

When users have finished adding files and save the changes, the attachment section or the whole page switches to view mode. In general, there is a “Save” button for all objects in the edit/create workflow. In cases where the object is editable by default and changes are autosaved, the attachment component stays in editing mode all the time.

Edit mode (left) and view mode (right)
Edit mode (left) and view mode (right)

Based on the floorplan used in the app, the attachment list expands full-width within the content area.

Attachments are displayed in list view by default, users can use the grid view icon to switch to grid view. In certain contexts, the majority of attached files has preview images, such as attached photos, so consider making grid view the default view. No matter what the default view or what view the user is currently looking at, it becomes a list in edit mode.

List view (left) and grid view (right)
List view (left) and grid view (right)

Resources

Development: AttachmentFormCell

SAP Fiori for iOS: Attachments

List Picker Form Cell

The list picker form cell allows for the selection of one or more options among values within a defined category. It serves as the entry point to a list of available values for that category and summarizes the selected value.

List picker form cell on a compact (left) and expanded screen (right)
List picker form cell on a compact (left) and expanded screen (right)

Usage

Do
  • Use a list picker form cell when the size and nature of available options are unknown or dynamic, for example, data from a database.
  • Use a list picker form cell when the available options have or can be displayed with a consistent structure, for example, text or object cells.
Don't
  • Don’t use the list picker form cell for boolean options (e.g., true/false or yes/no), use the switch instead.
  • Don’t use a list picker if the selection requires complex input, for example, entering text, manipulating sliders, or interacting with multiple elements simultaneously.

Anatomy

List Picker Form Cell

A. Label 

The label defines the topic or the name of the list. 

B. Selected Values 

This area shows an overview of the selected values. When it’s empty, the area could display prompt text. 

C. Helper Text (Optional) 

The helper text provides additional information about the selection, such as hints, requirements, etc. 

D. Chevron Button 

The chevron button indicates the tapping and drilling-down capability of the form cell. 

List picker form cell anatomy
List picker form cell anatomy

List Picker Selection View 

A. Value Lists

The value list displays a list of items within a specific category. Each value list contains a section header, an optional button, and list items. 

B. Section Header

The section header describes all values within the grouped list and gives users the ability to select or deselect all values at once. The title, button label, and button functionality can be customized based on users’ needs. 

C. “Close” Button 

The “Close” button discards the changes and quits the selection view. 

D. Reset & Search (Optional)

The search function helps the user quickly find a specific value from the list. The reset button can revert the selection to a default state. 

E. Anchor Button

The anchor button appears in the selection view during scrolling and floats over the value list. It can take users back to the top of the list. 

This feature is applicable to multi-select only. 

F. Prompt Text (Optional)

The prompt text is a short and brief instruction for users. 

G. “Apply” Button

The “Apply” button saves a user’s selection to the list picker form cell. It’s optional for the single-select list picker. 

List picker selection view anatomy
List picker selection view anatomy

Behavior and Interaction

Select and Apply

To select and apply values from a list, users can tap on the list picker form cell and drill down to the list picker selection view, where they can tap on values to select or deselect them.

  • If the value list is long, users can scroll down and view more options in the expanded bottom sheet.
  • To quickly review their selections, users can use the anchor button to go back to the top.

Once users have made their selections, they can save the changes by tapping the “Apply” button. The selected values are displayed in the list picker form cell, giving users an overview of their selection.

Interaction of selecting and applying values
Interaction of selecting and applying values

Discard Changes

Users may exit the selection view by tapping on the “Close” button. To prevent users from accidentally losing their changes, consider adding an additional confirmation dialog.

Please refer to List Picker Detailed User Flow to learn more about the existing options and behaviors.

Interaction of discarding changes
Interaction of discarding changes

Validation Message

Use a validation message only when necessary, such as to warn users that input fields must not be empty. Avoid providing users with irrelevant or unimportant information that may distract them. For page-level feedback, use a snackbar instead.
The validation message should be concise. We recommend using one line of text only.

List picker form cell with success message (top) and error message (bottom)
List picker form cell with success message (top) and error message (bottom)

Variations

Selection Type

The list of values can be either single-select (radio buttons) or multi-select (checkboxes).

Single Selection

To enable rapid selection, consider hiding the “Apply” button.

Multi-Selection

To display all selected values, consider enabling the “Selected Value” list.

Single selection without “Apply” button (left) and multi-selection without “Selected Value” list (right)
Single selection without “Apply” button (left) and multi-selection without “Selected Value” list (right)

Value Type

Text Value

Text value is a common type of data to be displayed in the list.

By default, the text is displayed on the right side of the selection control and can be wrapped in several lines.

Custom Contents

Users can insert self-defined contents such as the object cell and contact cells into a list picker item when additional information is needed to be shown

When displaying object cells in a list, make sure the layout is simple to make the checkbox / radio buttons prominent. 

Multi-selection in text format (left) and in object cell format (right)
Multi-selection in text format (left) and in object cell format (right)

Value List

In a list picker, there could be one or multiple value lists. The section header and button are customizable based on product needs. For multi-selection, there are two default value lists:  

  • “Selected” Value List (Optional): The “Selected” value list summarizes the values that have been selected and appears at the top of the list. Users can deselect all values at once by tapping the “Deselect All” button.  
  • “All” Value List: The “All” value list contains all available values inside the list picker. Users can select all values at once by tapping the “Select All” button. 
"Selected” value list and “All” value list (left) and multiple value lists with custom sections (right)

Selection View

There are two options a list picker selection view can be displayed. Depending on the size and nature of the value list, choose the option that best fits your app’s use case. If the value list is large, the half-screen view can be expanded to the full-screen view naturally while the user scrolls.

Half-Screen View (Default)

The half-screen view is a modal bottom sheet that occupies half of the screen height and overlays the background. It’s best used when the value list is expected to be short and simple, for example, such as when it contains only three to six values.

Full-Screen View

The full-screen view occupies the full screen height like a page. When the value list is expected to be long or unknown, choosing the full-screen view will help users to browse.

Half-screen view (left) and full-screen view (right)
Half-screen view (left) and full-screen view (right)

Adaptive Design

The selection view adapts to different screen sizes. On compact windows, the list picker selection view appears as a bottom sheet. On medium or expanded windows, the list picker selection view appears as a dialog. The other features remain the same on all window size classes. 

List picker selection view on a compact (left) and medium/expanded screen (right)
List picker selection view on a compact (left) and medium/expanded screen (right)

Resources

Development: List Picker, GenericListPickerFormCell

SAP Fiori for iOS: List Picker Form Cell

Object Cell

Object cells are made up of text, images, or icons. They can be configured in many ways to accommodate a wide variety of use cases.

Object cell on mobile (left) and tablet (right)
Object cell on mobile (left) and tablet (right)

Usage

Do

Use an object cell to preview information about an item in a list format. 

Don't

Don’t use an object cell to compare attributes from different list items. Use a data table instead. 

Anatomy

An object cell may contain text labels, images, or icons each with a specific purpose. These content types are structured in the following way and can be reconfigured, added or removed: 


A. Container

The container holds all content types. The container height depends on the height of the tallest vertical element while the container width is defined by the view.

B. Numeric Label (Optional)

The numeric label is used to represent object cells in a numerical sequence. If used, the numeric label should display on all object cells within a list. The numeric label may also display icons below the numeric label. These icons may be used to indicate various aspects of the object.

C. Image (Optional)

An image provides a visual representation of the object within a 40dp frame. The image may have a square or circular frame depending on the type of object that the object cell represents. If the object cell represents a user, use a circular frame. If the object cell represents an object, use a squared frame.

D. Title Area

The title area is used to place the main text content related to the object. The title area is limited to three lines of text, (title, subtitle, and caption) and is the only mandatory content for the object cell.

E. Tags (Optional)

Tags are identifiers that can be added to objects such as categories, groupings, or categorizations. Tags should be concise. When using tags, maintain wording to a maximum of two words.

F. Avatar Row (Optional)

An avatar row is a collection of inline user images that indicate a group of users associated with the object. Use an avatar row to indicate users in a meeting, users assigned to a task, or users in a message thread.

G. Description (Optional)

A description is used to provide supplementary information relating to the object. The description label can wrap up to three lines and will truncate after that.

H. Attribute (Optional)

An attribute is a vertically stacked arrangement consisting of labels and/or icon types that are displayed towards the right. The icons or labels can be used to indicate a condition of the item such as its priority or status.

I. Actions Area (Optional)

An actions area is used to place secondary actions in addition to the primary act of drilling down. Secondary actions include but are not limited to Information disclosure, Download, or a More menu.


Anatomy of the object cell
Anatomy of the object cell

Behavior and Interaction

The following are behaviors found throughout all object cells. These behaviors can be enabled or disabled depending on the app’s needs.


Drill-Down

As the most basic interaction model, the object cell uses drill down to navigate to another page.

Navigating to another page using drill down
Navigating to another page using drill down

Selection Mode

The selection mode is activated via the edit icon and allows users to select multiple or all object cells within a list. When in selection mode, a checkbox control will transition from the left side of the screen while the default app bar actions transform into actions relevant to the user’s task.

Selecting items within a list
Selecting items within a list

Swipe

Secondary actions can also be hidden and are activated by either swiping left or right. Different types of actions can be determined by an app’s needs such as delete, mark as favorite, pin, or archive.

 Deleting an item with a swipe action
Deleting an item with a swipe action

Adaptive Design

The object cell is supported in both mobile and tablet devices. All content types are supported in both device sizes (i.e. Description is now supported in mobile).

Object cell on mobile (left) and tablet (right)
Object cell on mobile (left) and tablet (right)

Variations

Different variations of the object cell can be created by reconfiguring different content types. Moving in this modular approach allows it to cover simple as well as complex requirements.


Navigation

As the most basic configuration, this variation’s primary function is to navigate to a specific page. This variation consists only of the container and the title area.

Single-line object cell used to navigate to a specific page
Single-line object cell used to navigate to a specific page

Preview

The most common variation is used to preview information of an object and navigate to view the entirety of the object, usually as an object page. This variation consists of but is not limited to a container, image, title area, and description. 

Three-line object cell used to surface an object's detail
Three-line object cell used to surface an object's detail

Contact

The contact variation is similar to the preview variation but provides quick access to various methods of communicating with a contact. This variation consists of but is not limited to a container, image, title area, and actions.

See Contact Cell for more information.

A two-line object cell with multiple inline actions on the right
A two-line object cell with multiple inline actions on the right

Control

The control variation displays information and controls. This variation consists of a container, text area, and control. The controls that can be used in this variation are a radio button and a checkbox. 

A single-line object cell with a radio button on the left
A single-line object cell with a radio button on the left

Resources

Development: FioriObjectCell, ObjectCell, GridObjectCell, GridTableRow, ContactCell

SAP Fiori for iOS: Object Cell

Material Design: Lists

Related Components/Patterns: Checkbox, Radio Button, Card Cell

Text Inputs

Text input controls are used to request a text entry from the user. They are usually found in the create or edit pattern.

Text input controls on mobile (left) and tablet (right)
Text input controls on mobile (left) and tablet (right)

Usage

Do
  • Use capital case for labels.
  • Use an asterisk next to the label to indicate it is a required input.
  • Use sentence case for placeholder text, helper text, and error messages.
  • Use note form cells for text input that requires more text input.
  • An error message should tell the user clearly how to fix the error.
Don't

Don’t show both helper text and error text.

Anatomy

A. Label

Describes the intent of the text input form cell.

B. Input Area

Indicates tappable area where input values are displayed.

C. Helper Text

Provides additional information about the form cell.

If the cell is read-only, we recommend displaying “Read-only field” as hint text.

D. Right Accessory Icon (Optional)

In certain use cases, a barcode scanner may be used to populate the input field with information.

E. Character Counter (Optional)

Displays the number of input characters in real-time over the total character limit.

Anatomy of a text input form cell
Anatomy of a text input form cell

Variations

Simple Property Form Cell

A simple property form cell consists of a label (property key) and a text field (user input text). It is used for collecting short input. The label is required for the simple property form cell. It helps users to identify the purpose of the text entry.

Simple property form cell
Simple property form cell

Simple Property Form Cell with Scan

A secondary action can be added to a simple property form cell to provide input methods besides typing. Currently, the SDK supports getting a text value through barcode or QR code scan. A scan icon is used to indicate the feature. A helper text can be used to explain the feature to the user.

A scanner is launched when the user taps on the scan icon. The user may scan a barcode or QR code of an object to get the property specified in the cell. The value is filled in the simple property cell. If needed, the user may edit the value directly.

Simple property form cell with scan
Simple property form cell with scan

Simple Property Form Cell with Show/Hide Password

For password entry, special secondary action is added to the simple property form cell. By default, password entry is displayed in an encrypted format. The user can tap on the eye icon to toggle password visibility.

Simple property form cell in read-only state (top) and disabled state (bottom)
Simple property form cell in read-only state (top) and disabled state (bottom)

Note Form Cell

The note form cell is best used for collecting long user input, such as a note, comment, or description.

Note form cell
Note form cell

Behavior and Interaction

States

Enabled State

An optional placeholder text can be used to display a correct input value when the field is empty. It explicitly shows the user the expected text entry. Don’t use placeholder text for instructions because it disappears once the user starts typing. Instead, use helper text for instructions.

An optional helper text can be used to provide additional instructions. Helper text should be short and precise. Avoid wrapping to two lines.

The default state of the note form cell has a taller text field compared to the simple property form cell. This encourages users to enter more input.

Text input in a simple property form cell in enabled state (top) and text input in a note form cell in enabled state (bottom)
Text input in a simple property form cell in enabled state (top) and text input in a note form cell in enabled state (bottom)

Error State

When the user-entered value does not pass validation, the simple property form cell enters an error state. An error icon appears, indicating that this cell has an error, and a message appears below the text input to provide instructions on how to fix the error. Do NOT display both helper text and an error message at the same time. Replace the helper text with the error message when the field is in an error state.

Text input in a simple property form cell in error state (top) and text input in a note form cell in error state (bottom)
Text input in a simple property form cell in error state (top) and text input in a note form cell in error state (bottom)

Active Typing State

When the user is actively typing, a clear icon appears at the right end of the text field. The user can tap the “Clear” icon to delete all input. Generally, simple property form cells are used to collect short user inputs.

For simple property form cells, the height of the field is fixed. The text overflows to the left if the user types more than one line.

The note form cell text field can display three lines of text. As the user keeps typing, the text field can expand to a maximum height of six lines of text. This prevents the note form cell from covering the whole screen. After reaching the maximum height, the cell stops expanding. The content would scroll vertically inside the text field area as the text continues to wrap to a new line.

Text input in a simple property form cell in typing state (top) and text input in a note form cell in typing state (bottom)
Text input in a simple property form cell in typing state (top) and text input in a note form cell in typing state (bottom)

Read-Only State

Read-only state indicates the current user role does not have the authorization to edit this field while the information in the field is relevant to fulfill the task. The text field changes to a gray background to hint this is non-interactive, with a helper text below saying “Read-only field”. The user can select and copy the existing value text, but cannot activate the text field.

When in read-only state, the text field can expand to exceed the maximum height so that the text value is visible without scrolling inside the text field. The user can select and copy the existing text entry, but can’t change the text in the field.

Text input in a simple property form cell in read-only state (top) and text input in a note form cell in read-only state (bottom)
Text input in a simple property form cell in read-only state (top) and text input in a note form cell in read-only state (bottom)

Disabled State

If a text input form cell is disabled, the input in this field (if any) does not affect the task of the user. The disabled cell has an opacity of 50% to reduce distraction.

Text input in a simple property form cell in disabled state (top) and text input in note form cell in disabled state (bottom)
Text input in a simple property form cell in disabled state (top) and text input in note form cell in disabled state (bottom)

Character Counter

Default – Allow user to continue typing over the character maximum

In use cases where a user can continue typing over the character limit, the component displays an error once the user’s input surpasses the limit. The real-time counter turns red and the helper text appears or changes to “Reduce the number of characters”. The error state persists until the user’s input is shortened to within the character limit.

Character counter flow example: user input is allowed over limit and becomes an error
Character counter flow example: user input is allowed over limit and becomes an error

Stop user from typing once the character maximum is met

In use cases where a user is restricted from typing over the character limit, the user’s input is automatically stopped once they reach the limit. The helper text appears or changes to “Character limit reached”.

Character counter flow example: user input is automatically stopped when limit reached
Character counter flow example: user input is automatically stopped when limit reached

Resources

Layout

Layout utilizes several spatial practices, such as increments, paddings, vertical spacings, and window size classes. SAP Fiori for Android applies these practices to keep content aligned, organized, and accessible.

The same design for different layouts: compact (left), medium (middle) and expanded (right)
The same design for different layouts: compact (left), medium (middle) and expanded (right)

Density-Independent Pixels (dp)

SAP Fiori for Android uses a system of pixel units (dp) that allows for a design to scale to screens with different pixel densities. The UI therefore adapts to various device displays regardless of pixel density.

Increment System

SAP Fiori for Android layouts are designed in increments of 4dp and 8dp for smaller elements for scalability purposes. Using an incremental system allows for all measurements in a design to be predictable and easier to scale when designing on multiple devices.

The 4dp/8dp incremental system enables a variety of spacing options from 4dp to 52dp.
The 4dp/8dp incremental system enables a variety of spacing options from 4dp to 52dp.

Spacing

Margins

Margins are the spaces between the left/right window edge and the component. They are usually 16dp or 24dp depending on the window size.

Compact app screens with 16dp margins (left) and medium/expanded app screens with 24dp margins (right)
Compact app screens with 16dp margins (left) and medium/expanded app screens with 24dp margins (right)

Padding

Padding is the horizontal or vertical space between elements inside a component. Padding maintains consistency and allows for ease of scalability.

Specifications on compact (top) and medium/expanded screens (bottom)
Specifications on compact (top) and medium/expanded screens (bottom)

Height

The height and spacing between the elements within a component should add up to an increment of 4dp. This height influences the overall vertical layout.

Component heights in increments of 4dp
Component heights in increments of 4dp

Window Size Classes

Window size classes are recommended breakpoints that provide universal responsiveness regardless of the device types and sizes. The primary window size classes are based on the window width. Usually, these are the only variations for the responsive layouts.

Breakpoints of window size classes based on the window width
Breakpoints of window size classes based on the window width

The window margins are based on the window width. The compact class uses 16dp margins, while the medium and the expanded classes use 24dp margins.

Window size classes based on width: calendar in compact (left), medium (middle), and expanded (right) size classes
Window size classes based on width: calendar in compact (left), medium (middle), and expanded (right) size classes

In some rare cases when the component has constraints on both width and height, the secondary size classes based on the window height are introduced for more tailored experience. 

Breakpoints of window size classes based on the window height
Breakpoints of window size classes based on the window height

For example, in medium/expanded window size class, the Sort & Filter pattern is displayed as a regular dialog, whereas in a compact height window, this regular dialog is translated to a full-page dialog to ensure enough space to scroll through the contents. 

Window size classes based on the window height: sort & filter in compact (left), medium/expanded (right)
Window size classes based on the window height: sort & filter in compact (left), medium/expanded (right)

Touch Target

Consider accessibility when designing the spacing of interactive elements. Provide ample space to place elements and consider a minimum of 48dp x 48dp touch target with 8dp padding between multiple touch targets.

48dp x 48dp touch targets
48dp x 48dp touch targets

Resources

Material Design 3: Understanding Layout, Applying Layout 

Radio Buttons

Radio buttons provide users with a set of mutually exclusive options. They allow them to select only one option from two or more choices. Each option is represented by a radio button.

Usage

Do
  • Use radio buttons for single selection.
  • Use radio buttons when at least two distinct choices are available.
  • Use radio buttons to display all available options directly to users.
Don't
  • Do not use radio buttons for multiple selection.
  • Do not use radio buttons if the options are numbers with fixed steps, use a slider instead.
  • Do not use a radio button when there are only two mutually exclusive options, instead, use a single checkbox or switch. For example, to accept terms of use, use a single checkbox for “I agree” instead of two radio buttons for “I agree” and “I don’t agree”.

Anatomy

A. Property Name

A set of radio buttons is used to show all available values for a certain property. The property name should be displayed at the top of the list. If the whole page is used to display available values, display the property name as the title in the app bar.

B. Radio Button Cell

A radio button followed by a text value forms one radio button cell. Each available option forms its own cell. Display the cells in a meaningful sequence, for example, in an alphabetical sequence for names.

C. Cell Group

Radio button cells can be grouped into categories. Each category has a header showing the name of the group.

Anatomy of radio buttons
Anatomy of radio buttons

Behavior and Interaction

The user taps a radio button cell to activate the related option. Each cell is one touch target. Tapping an activated option does not deactivate it but tapping a different option transfers activation to that option. Therefore, a user can select only one option from a group of radio button cells. When a specific option is disabled, apply 50% opacity to that radio button cell. Disabled options are not interactive.

Enabled radio button cells
Enabled radio button cells
Disabled radio button cells
Disabled radio button cells

Resources

Development: RadioButton, MaterialRadioButton

Material Design: Radio Buttons

Dialogs

Dialogs are a type of modal that are used to provide high priority information, display critical information, or ask for specific user action or decisions. It prompts the user to react and it interrupts the process of the application.

Alert Dialog
Prompts the user by displaying urgent information, detail, or actions.

Simple Dialog
Displays a list that requires a selection that will take immediate effect.

Confirmation Dialog
Confirms a choice, requiring the user to accept or dismiss.

Full-Screen Dialog
Uses the entire screen with a series of tasks to complete, like a form.

Alert dialog (first), simple dialog (second), confirmation dialog (third), full-screen dialog (fourth)
Alert dialog (first), simple dialog (second), confirmation dialog (third), full-screen dialog (fourth)

Usage

Do

Use a dialog for important or critical information that requires a specific user action, decision, dismissal, or acknowledgement.

Don't
  • Don’t place more than two actions on a dialog.
  • Don’t use a dialog if you want to display a simple message where there’s no action to take, use the snackbar instead.

Anatomy

Alert Dialog

A. Text

Describes the action and prompts the user to take action.

B. Footer Bar

The footer bar houses the buttons for the user to take action.

Alert dialog anatomy
Alert dialog anatomy

Full-Width Button Dialog

A. Title

Summarizes the dialog’s purpose.

B. Description

Describes what action needs to be taken in a clear and concise manner so that the user knows what to do.

C. Footer Bar

The footer bar houses the buttons for the user to take action.

Full-width button dialog anatomy
Full-width button dialog anatomy

Simple Dialog

A. Title

Summarizes the dialog’s purpose.

B. Selection List

Lists the possible options that the user may choose from.

Simple dialog anatomy
Simple dialog anatomy

Confirmation Dialog

A. Title

Summarizes the dialog’s purpose.

B. Selection List

Lists the possible options that the user may choose from.

C. Footer Bar

The footer bar houses the buttons for the user to take action.

Confirmation dialog anatomy
Confirmation dialog anatomy

Full-Screen Dialog

The full-screen dialog has an app bar at the top, and content displayed inside a dialog area.
For a modal dialog on tablet, a scrim covers the content underneath the dialog.

A. App Bar

Contains a discard action button on the left, and a confirmation action button on the right. The “close” icon is used by default for discard action. Unsaved changes trigger a confirmation dialog when users tap on the “Close” icon. The title should indicate the task performed by this dialog (for example “Create Work Order”).

Users can drill down within a full-screen dialog with a push navigation. In the drill down page, a back arrow icon replaces the “Close” icon for users to navigate back. Changes in the drill down page are reflected once users navigate back.

B. Content Area

All types of controls and form cells can be used in full-screen dialog to fulfill the task. See Filter and Create.

C. Scrim

The scrim for the modal dialog is #000000 with 32% opacity.

When a second dialog appears on the screen, such as a confirmation dialog / date-time picker launched from an existing dialog, remove the existing scrim and apply a darker scrim (#000000 with 60% opacity) on top of the first dialog. This darker scrim applies focus on the new modal. It pushes the new dialog to the foreground and all other content gets pushed to the background.

Full-screen dialog anatomy: mobile (left), tablet (right)
Full-screen dialog anatomy: mobile (left), tablet (right)

Adaptive Design

Alert, Simple and Confirmation Dialog

Mobile

For mobile, the recommended dialog width is 280dp.

For dialogs that have a selection list, the maximum height for the list is set to six list cells. Since each list cell is 48dp in height, this means the maximum height for the list is 336dp. If it exceeds six items, the list area is scrollable to see the other options.

Tablet

For tablet, the dialog width depends on the content, but it needs to be a multiple of 56 with a maximum width of 560dp.



Full-Screen Dialog

Mobile

On mobile, the full-screen dialog covers the whole screen.

Tablet

On tablet, the modal is center aligned horizontally and vertically. The modal dialog does not have a set of width or height. Below are some recommended rules. You can adjust it based on your specific device or use case:

Height:

  • The dialog height depends on the content height.
  • We recommend a minimum modal dialog height of half the screen height in landscape mode.
  • The maximum height of a dialog starts from 24dp from the top of the screen (right below status bar), to the bottom of the screen content area (above the bottom navigation bar).
  • When content exceeds the maximum height, it scrolls vertically inside the dialog. The dialog may grow taller when the device is rotated from landscape to portrait mode to reveal more content.

Width:

  • We recommend a dialog width of 512dp.
  • Keep the dialog width the same on both landscape and portrait mode to reduce distracting transitions.
  • The maximum width is 560dp.
Modal dialog with maximum height: landscape mode (left) and portrait mode (right)
Modal dialog with maximum height: landscape mode (left) and portrait mode (right)

By default, dialog height should be determined by the content in the initial screen (parent).

When navigating to the next screen inside the dialog, for example, drilling down to a list of checkbox cells from a list picker form cell, consider the following recommendations:

  • If the child screen has less content than the parent screen, use the same dialog height as the parent screen to avoid disruptive transitions.
  • If the child screen has more content than the parent screen, increase the screen height to accommodate more content (until it reaches the maximum height allowed by the device).

In summary, the child screen can be equal to or taller than the parent screen.

Dialog's height changes based on content length
Dialog's height changes based on content length

Variations

Alert Dialog

Alert dialogs prompt the user by displaying urgent information, detail, or actions. The dialog cannot be dismissed or closed until the user selects one of the actions.

The action must describe what the selection will do. Avoid using “Yes” or “No” choices. Instead, be more explicit by using descriptive verbs such as “Cancel” or “Delete”.

Unlike other dialogs, the alert dialog does not have a title.

Alert dialog
Alert dialog

Full-Width Button Dialog

There is also a stacked full-width button dialog which could be used if the buttons require longer text.

Stacked full-width button dialogs can be used for alert and confirmation dialogs.

Full-width button dialog
Full-width button dialog

Simple Dialog

Simple dialogs display a list that requires a selection that will take immediate effect. Due to its interruptive nature, a non-dialog option for providing options would be a dropdown menu.

Users have the following options to interact with the simple dialog:

  • Tapping one of the actions in the list, which closes the dialog.
  • Tapping outside of the dialog to close the dialog without a selection.

Do not use buttons with simple dialogs as choosing one of the selections is the affirmative action and tapping outside of the dialog will close it without a selection.

Simple dialog
Simple dialog

Confirmation Dialog

Confirmation dialogs are used to confirm a choice and requires the user to accept or dismiss. It allows the user to commit to their choice before it’s applied. Unlike the simple dialog, the confirmation dialog uses buttons so that the user can change their selection as many times as needed before affirming.

There are two ways to interact with the confirmation dialog:

  • Tap the confirmation button and it will apply the action that was selected.
  • Tap the dismissive action and the action will be canceled.

Do not provide one single action, you must provide an option for confirming and dismissing.

To confirm a choice, the user taps a confirmation action.

Confirmation dialog
Confirmation dialog

Full-Screen Dialog

Full-screen dialog covers the whole screen to maximize available screen space for relatively complicated tasks such as create. Use a full-screen dialog only on mobile devices. On tablet, where a lot more screen real estate is available, it becomes a modal dialog (do not cover the whole screen). There is one exception: use full-screen dialog instead of modal on tablet when editing an existing object. This is to prevent users from editing the copy of attributes that can be seen under the semi-transparent scrim.

Full-screen dialogs are the only dialogs that allow other dialogs to appear on top.

Full-screen dialog on mobile (left) and tablet (right)
Full-screen dialog on mobile (left) and tablet (right)

Resources

Development: AlertDialog, MaterialAlertDialogBuilder

SAP Fiori for iOS: Modals

Material Design: Dialogs

Profile Header

The profile header gives a quick intro of a person to the user. It also includes methods to contact that person quickly without needing to access a different area of the profile page.

Profile header on mobile (left) and on tablet (right)
Profile header on mobile (left) and on tablet (right)

Usage

Do

Use the profile header on a user profile or an object detail page.

Don't

Do not include lengthy information. It should be a short summary for that person.

Anatomy

The profile header can accommodate different types of content depending on what information is provided. The types of content are one image, name, title, description, and action buttons (one to five). The name is required, but all other content types are optional, although we strongly recommend including them to provide more information.

A. Top App Bar

Since the profile header will appear on what is considered a detail page, the app bar should have a navigation icon to either take the user back to the previous screen or if this profile behaves more like a full-screen dialog, then use a close icon. After the navigation icon, the profile title can describe the general page that encompasses all profiles of a similar kind, such as an internal employee, a client, a member, a particular team, and so on. At the end, if there are extra functions such as downloading contact information or sharing, then it can live in a menu that is accessed by the menu icon. For more information about menus, see Menus.

B. Image (Optional)

We recommend using an image so that the user can quickly identify and see the person the profile is about. Images of people should always be in a circle.

C. Name

The name must include the first and last name of the person.

D. Subheading (Optional)

The subheading is optional and can be secondary information about the person, such as their job title or location.

E. Description (Optional)

The description may include three-lines of text. If it requires more than three lines, consider moving it to the top of the content area below the profile header.

F. Action Buttons (Optional)

There can be one to five action items in the profile header. If there is only one action button, you can put it in the top app bar. However, due to space limitations, it’s recommended that the action items use an icon button rather than text button. If it must be a text button, we recommend only up to two text buttons. Due to these limitations, only use frequently used actions in the context of the current screen.

These actions are buttons so they must follow the same behaviors and interactions as buttons, which means that they must have different states. For more details on how buttons are designed and how they behave, see Buttons.

If a certain action is not available, the action should use the disabled state, which is set to 50% opacity.

Profile header anatomy
Profile header anatomy

Behavior and Interaction

Scrolling

Due to the nature of the prominent top app bar, if the user scrolls down the screen, the profile header gets condensed to the app bar in which it only shows the navigation icon, object title, and any other button in the app bar. If the user scrolls back up, then the full object header slides out again. This behavior occurs on all devices.

User interaction with profile header
User interaction with profile header

Adaptive Design

The profile header is available on both compact and regular width.

Profile header compact width (left) and regular width (right)
Profile header compact width (left) and regular width (right)

Variations

Profile Header with Action Icons

When including action items, there can be a minimum of two and a maximum of five, though having this many is not recommended. Only present icons that are frequently used in the current context. Apply a gray color to the action icon when it is disabled.

Profile header with five actions (top) and two actions (bottom)
Profile header with five actions (top) and two actions (bottom)

Profile Header with Action Button

As the name implies, an action button allows the user to perform an action on the current object. Common actions include adding an object to a list, starting an event with an object, or otherwise marking an object.

When an action button is tapped, it should adopt an active state; when it is tapped again, it should return to its inactive state. Button text should clearly communicate to the user what will happen when the button is tapped.

Please note that icons are also a recommended way to provide actions within the header.

Profile header with a shape type button (top) and an emphasized button (bottom)
Profile header with a shape type button (top) and an emphasized button (bottom)

Resources

Development: ProfileHeader

SAP Fiori for iOS: Profile Header

Object Header

The object header is the topmost area in the object’s detail page that provides a detailed glimpse of that object. The object header provides an area that contains information such as object title, subtitle, and description amongst other supplementary information.

Object header with two pages on mobile (left) and tablet (right)
Object header with two pages on mobile (left) and tablet (right)

Usage

Do

Use concise wording.

Don't

Don’t use wordy or lengthy content in the object header.

Anatomy

Object Header Structure


A. Main Content Area

The main content area contains information about the object such as image, title, status, and supporting attributes. Additional information such as description and header chart may be placed on other pages based on space.

B. Pagination

Pagination is a non-interactive visual indicator consisting of inline dots indicating the number of pages on the object header and the user’s position on the page. Use pagination as an overflow if the object header must support multiple content types such as description, charts, or KPI.

Anatomy of the object header
Anatomy of the object header


Content Types


A. Image (Optional)

An image is a 40dp x 40dp area that represents the object through an image or avatar.

B. Title

The title points to the object or product’s name which allows it to be identified amongst other objects. The title should be descriptive.

C. Status Label (Optional)

Shows a brief pertinent description of the object, for example, it can show the priority or urgency of the object’s status. When using a status, the wording should be concise. Maintain wording to a maximum of two words.

D. Subtitle (Optional)

Subtitles may provide additional context for the object with information such as ID, type, etc.

E. Tags (Optional)

Tags are data about the object such as identifiers, groupings, or categorizations that allow users to easily identify these characteristics. When using tags, the wording should be concise. Maintain wording to a maximum of two words.

F. Status Row (Optional)

The Status row is an additional area in the object header, where you can display one or two status labels. You can create an additional layout using both the status label and the status row. Status items should be concise. When using status items, the wording should concise. Maintain wording to a maximum of two words.

G. Label Items (Optional)

Label items consist of a text label and an icon, which are used as supplementary information about the object, such as location, due date, or type. When using label items, the wording should be concise. Maintain wording to a maximum of two words.

H. Description (Optional)

A description allows for lengthier information about the object.

I. KPI (Optional)

Shows relevant trends or status about the object.

J. Header Chart (Optional)

Shows chart visualizations of the object.

Content types from A–J
Content types from A–J

Behavior and Interaction

Scroll Collapse

If the user scrolls up, the object header collapses to show more vertical areas. If the user scrolls back, the object header returns to its default height.

Scroll collapse
Scroll collapse

Horizontal Swipe

To fit different content types, app teams may distribute content into a collection of slides. To navigate, the user horizontally swipes to navigate between slides. A pagination indicator is displayed at the bottom of the object header to indicate the total number of slides and the user’s current position in the collection of slides.

Horizontal swipe
Horizontal swipe

Push Navigation

Tappable header chart titles can be enabled to allow the user to push navigate from the object header to the full-screen chart and vice versa. Tappable header chart titles are tinted in CTA colors to indicate their interactivity.

Push navigation
Push navigation

Variations

Mobile and Tablet

If there are space limitations, the object header content can be separated into two or more slides. All the slides of a specific object header must match the height of the tallest slide to keep the UX consistent and prevent content from shifting.

A. Main Information

B. Description

C. KPI

D. Chart

Variations of the object header on mobile and tablet
Variations of the object header on mobile and tablet

Resources

Development: FioriObjectHeader, ObjectHeader

SAP Fiori iOS: Object Header

Chips

Chips are interactive elements that provide users with a set of options. Users can tap a chip to make selections. Chips can be used for single and multiple selection. A single selection chip is an alternative for a radio button and a multiple selection chip is an alternative for a checkbox.

Chips form cell on mobile (left) and on tablet (right)
Chips form cell on mobile (left) and on tablet (right)

Usage

Do
  • Use chips when you need to help users quickly to choose between at least two clearly distinct choices.
  • Use chips to optimize screen space when the text of value is short.
Don't
  • Don’t use chips when the number of options is more than eight, use a list picker form cell.
  • Don’t use chips when the text of value is very long, even if the number of options is no more than eight. Use a list picker form cell instead.

Anatomy

Chip Form Cell

A. Label

Describes the intent of the chip form cell. 

B. Chips

Displays a list of chips for users to select. 

C. Helper Text

Provides additional information about the form cell. 

Chips form cell anatomy
Chips form cell anatomy

Chip

A. Container

A chip container defines the boundary of each chip. All chip elements are wrapped in a chip container. The width of the container depends on the length of its content. Each container is a touch target.

B. Text Label

A text label describes what each chip stands for. Text labels should be concise.

C. Check Mark

A check mark appears when a filter chip is selected and disappears when it’s deselected.

Chips anatomy
Chips anatomy

Variations

Single Selection

Single selection chips provide users with a set of mutually exclusive options. The user taps on a chip to activate the option. Tapping a different chip transfers activation to that option. Therefore, only one chip can be selected in a group of single selection chips. Single selection chips can be an alternative for radio buttons.

When selected, a check mark appears in front of the text label and pushes the text to the right. The chip container expands horizontally to accommodate the check mark. The check mark disappears when the chip is deselected. The text label shifts left and the chip container returns to its original size.

Single selection chips
Single selection chips

Multiple Selection

Multiple selection chips allow users to select multiple options from a set of values. Each chip toggles between selected and unselected. Multiple selection chips can be an alternative for checkboxes.

When selected, a check mark appears in front of the text label and pushes the text to the right. The chip container expands horizontally to accommodate the check mark. The check mark disappears when the chip is deselected. The text label shifts left and the chip container returns to its original size.

Multiple selection chips
Multiple selection chips

Chip with Leading Icon

Chips with a leading icon can be used for single and multiple selection. When selected, no check mark will appear.

Chips with a leading icon
Chips with a leading icon

Wrapped

A group of chips is typically displayed horizontally under the title. The title describes the meaning or purpose of the group. More than one row of chips can be wrapped to the next row, or overflow to the right with horizontal scroll to show more. Choose the layout that provides the best readability for your use case. 

Chip form cell with horizontal scroll (top) and wrapped (bottom)
Chip form cell with horizontal scroll (top) and wrapped (bottom)

Behavior and Interaction

Error State

Use validation message only when necessary: to show an error message or direct feedback of this control. Don’t distract users with unimportant information. For page level feedback, use a snackbar instead.

The validation message should be concise. One line of text is recommended for the validation message.

By default, there is no validation message. When the validation message is triggered, insert the message with padding after the last row of chips before the divider line if used. The content under it will be pushed down.

Chip form cell in error state with error message
Chip form cell in error state with error message

Resources

Development: FilterChip, FilterChipFormCell

SAP Fiori for iOS: Filter Form Cell, Segmented Form Cell

Material Design: Filter Chip

Date & Time Pickers

The picker is used for time-based selections. Depending on your use case, you can use a date picker, time picker, or time duration picker. Pickers are always displayed in a dialog.

Date picker (left), time picker (middle) and time duration picker (right)
Date picker (left), time picker (middle) and time duration picker (right)

Usage

Do

Use a picker for a time-related decision that the user needs to make.

Don't
  • Don’t use a picker for picking a number that isn’t related to time.
  • Don’t use the date picker for selecting a duration of time.
  • Don’t use the time duration picker for selecting a date.

Anatomy

Date Picker

A. Header
Includes the title for the date picker and then the abbreviated name for the day of the week with the abbreviated name for month and the day.

B. Month Selector
The user can use the arrows to move a month up or down.

C. Day of the Week
The day of the week is represented by a single letter.

D. Calendar
The calendar shows all days of a month grouped by weekly rows.

E. Footer Bar
The footer bar houses the buttons for confirming or dismissing the dialog.

Anatomy of date picker
Anatomy of date picker

Time Picker

A. Header
Includes the text for the time for hour and minute with a selector for choosing AM or PM.

B. Clock
Imitates the look of an analog clock in order to display the time for the user to select.

C. Clock Hand
The clock hand shows what the user selects for the hour and the minute by rotating to the number the user chooses.

D. Footer Bar
The footer bar houses the buttons for confirming or dismissing the dialog and the input button allows the user to switch to the input time picker.

Anatomy of time picker
Anatomy of time picker

Time Duration Picker

A. Title
Describes what this time duration picker is for or instructs the user on what to do.

B. Previous Value Preview
The value dial shows a preview of the previous value at the top. There is a slight white gradient on top of the numbers for less emphasis.

C. Selected Value
The value in the center, marked with a blue border on the top and bottom, is the selected value.

D. Next Value Preview
The value dial shows a preview of the next value at the bottom. There is a slight white gradient on top of the numbers for less emphasis.

E. Footer Bar
The footer bar houses the buttons for confirming or dismissing the dialog.

Anatomy of time duration picker
Anatomy of time duration picker

Behavior and Interaction

For more information about the behavior of pickers, see Dialogs.

To learn more about the form cell to trigger the dialog, see Time Picker Form Cell.

Time Duration Picker

The time duration picker is a spinning dial where the users rotate through the numbers to select the value they want at the center. It is formatted to show hours and minutes.

Interaction of time duration picker
Interaction of time duration picker

Variations

Date & Time Picker

The date picker allows the user to select a specific date with the calendar and the Time Picker allows the user to select a specific time through the clock.

 

In some cases the picker may allow the selection of both date and time. If that is the case, the picker has two parts to the dialog, where the first dialog displays the interface for picking a month, day, and year, and the second dialog is for selecting the specific time based on an analog clock interface.

Date picker in portrait orientation (left) and time picker in landscape orientation (right)
Date picker in portrait orientation (left) and time picker in landscape orientation (right)



Time Duration Picker

The time duration picker lets the user scroll through a list of values. The value in the center of the picker is the selected value to be used.

Time duration picker on mobile
Time duration picker on mobile

Resources

Development: DatePicker, DateRangePicker, DatePickerDialog, MaterialDatePicker

SAP Fiori for iOS: Pickers

Material Design: Date Pickers, Time Pickers

Introduction

Basic components are a group of components that follow exactly how Material Design defines them as they are integral to the Android UX.

Visual

The only UI changes made for basic components in SAP Fiori for Android are color and typography.

Behavior

Basic components are components that are essential to Android UX. They remain structurally identical with how Material Design defines these components in order to maintain familiarity for Android users.

Single-User Onboarding

For enterprise software, onboarding is the process of activating an account by providing the user with key instructions. Existing user accounts are typically assigned by an admin or the IT department. The onboarding process can vary depending on the configuration of the app by the admin or the IT department in terms of data sensitivity, security level, and the number of users. 

Single-user onboarding user flow
Single-user onboarding user flow

Usage

Do
  • Welcome users with an element of excitement for the experience ahead. 
  • Keep the entire onboarding process as simple as possible and use clear language that gets straight to the point. 
  • Onboarding is supported on both mobile and tablet. For mobile, screens appear only in portrait mode. For tablets, onboarding is supported both in landscape and portrait mode.  
Don't
  • Don’t repeat onboarding after the user has completed the process.
  • Don’t skip the onboarding flow for first time logins.

Anatomy

0. Splash Screen 

The splash screen is the very first page that comes up when users open the app. It welcomes users by showing the app icon. It appears when the app is loading and transitions to the next page once the loading is completed. 

Splash Screen: Light mode (left), dark mode (right)
Splash Screen: Light mode (left), dark mode (right)


A. Launch Screen

The launch screen welcomes new users by showing the overall mood of the app and briefly presents the major features. It contains key actions for users to start interacting with the app, including agreeing to legal terms, trying out demo mode, and continuing to the app.

A. Application Details

  • App Logo (Optional): Recommended for branding purposes. 
  • App Title: Use clear and concise naming conventions for the application’s title. We recommend keeping the title length to two rows for mobile or one row for tablet.

B. Top User Benefit

This describes the primary benefits of the app and is helpful for users to understand the app’s purpose.

C. User Legal Agreement (Optional)

In proprietary software, an end user license agreement (EULA) or software license agreement is the contract between the licensor and purchaser, establishing the purchaser’s right to use the software. To move forward in the onboarding process, users must agree to the contracts. 

This area lists out the hyperlinks to the legal terms that users must agree to before proceeding to the app. Users must check the checkbox to continue with the app.

D. Start

The button is enabled for the user to proceed once they check the checkbox of the user legal agreement. 

E. Demo Mode

The demo mode allows users to try features of the app without needing to be fully invested. 

F. Footer (Optional)

The footer is an optional area. For certain scenarios, if the user agreement to legal contracts is not displayed, you can list the hyperlinks here in the footer area. 



Launch Screen
Launch Screen

If your app is available for download from Chinese app stores or websites, the disclosure of legal contracts must be displayed in a dialog view to comply with China’s legal requirements. 

Click here for the recommendations of the user flow. 

 



Launch screen with dialog
Launch screen with dialog

B. Agreement: EULA

This page displays the full content of the legal contracts. 

EULA (End User License Agreement)
EULA (End User License Agreement)


C. Activation: Choose Options

In this activation type, a user can choose to onboard with the discovery service or QR code scan. Once the option is selected, the rest of the process follows the flow of the activation type chosen. 

Activation by choosing between discovery service or QR code scan
Activation by choosing between discovery service or QR code scan


C-1. Activation: Discovery Service

For the discovery service onboarding, a text input field will appear on the activation screen. Here, an email address should be provided to start executing the discovery service-based onboarding process.

Activation using the discovery service by entering an email address
Activation using the discovery service by entering an email address


C-2. Activation: QR Code Scan

QR code activation requires the user to be provided with a QR code to scan. Users can scan a QR code by using the camera or by scanning via images saved on their phone gallery. Using the scanner has the benefit of reducing errors and streamlining the activation process. 

Activation by QR code scan
Activation by QR code scan


C-2. Activation: QR Code Scan Error

In the case that the QR code cannot be read or detected through the camera or the gallery, a dialog will appear to notify the user and present them with actions. 

QR code scan error
QR code scan error


D-1. Create Passcode

When users are prompted to create a new passcode, they must follow the list of passcode requirements. 

Create passcode screen with passcode requirements
Create passcode screen with passcode requirements


D-2. Verify Passcode

After creating the passcode, users will be prompted to verify the passcode for security purposes.

Verify passcode screens
Verify passcode screens


D-3. Biometrics

Depending on the device, certain biometrics methods may be utilized, such as a fingerprint scan or face recognition. Since the biometrics come from the Android system, the dialog for the biometrics authentication uses the system’s default. 

Verify passcode screens
Verify passcode screens


E. Sign-In

This process is a basic account sign-in through the user’s email address and passcode. 

Basic authentication sign-in through account and passcode
Basic authentication sign-in through account and passcode


F. Change Passcode

After creating a passcode, users may choose to change their passcode. Users are required to meet the passcode requirements and then verify the passcode afterwards.

Change passcode flow is identical to the create passcode flow
Change passcode flow is identical to the create passcode flow


G. Consent Form

The consent form may be used to ask for the user’s consent in things such as sending a crash report.

Consent form example
Consent form example


H. Loading Page

The loading page lets the user know the application is processing content and data.

Loading page with progress indicator
Loading page with progress indicator

I. Basic Authentication

Basic authentication is a basic login method with email address and passcode.

Authentication with email address and passcode
Authentication with email address and passcode


Adaptive Design

Launch Screen: Mobile (left) and tablet (right)
Launch Screen: Mobile (left) and tablet (right)
Agreement - EULA: Mobile (left) and tablet (right)
Agreement - EULA: Mobile (left) and tablet (right)

Resources

SAP Fiori for iOS: Onboarding

Related Components/Patterns: Privacy Notice 

Colors

Color sets the visual balance of SAP Fiori for Android apps. On screen, color is used to define the visual hierarchy of UI elements and to direct the user’s attention to complete their tasks.

Horizon Theme Color Palette

The Horizon color palette introduces a unified color palette that brings our brand and products together to achieve a cohesive experience across all SAP touchpoints. The Horizon color palette is designed to provide bold and vibrant color while remaining accessible in instances with complex UIs.

Horizon color palette
Horizon color palette

UI Colors

UI colors are colors that are grouped based on their role or usage within the UI. This additional level of abstraction allows product teams to swap out the default Horizon theme with their own product colors. UI colors are grouped into the following color groups:

  • Surface colors
  • Text colors
  • Borders colors
  • Semantic colors
  • Accent colors


Surface Colors

Surface colors are colors applied to the background of all components. These colors contrast with all foreground colors and are the basis for the overall theme. Surface colors are identified by the letter S followed by a number sequence (e.g., S1, S2, S3) in our UI Kit.

Light Mode Dark Mode Name Usage
Base White
#FFFFFF
Base Dark
#14171A
S0-Background Base Background (0dp)
Base White
#FFFFFF
Base Dark with Overlay
Overlay: #7198BF
S1-Primary Elevated Surfaces (1dp-24dp)
Blue 7
#0070F2
Blue 5
#4DB1FF
S2-Secondary Call-to-Action Elements
Grey 11
#12171C
Base White
#FFFFFF
S3-Tertiary Snackbar Background
Grey 1
#F5F6F7
Grey 6
#5B738B, 20%
S4-Quarternary Muted Backgrounds
Blue 7
#0070F2, 8%
Blue 5
#4DB1FF, 20%
S5-Selected Surface Selected Backgrounds
Base White
#FFFFFF
Base Dark with Overlay
Overlay: #7198BF
S6-Header Header Background
Grey 6
#5B738B
Grey 4
#A9B4BE
S7-Switch Idle Switch Backgrounds
Grey 7
#475E75
Grey 3
#D5DADD
S8-Switch Selected Selected Switch Backgrounds


Text Colors

Text colors are colors applied to the text and icons of all components. These colors range from neutral grey colors to interactive brand colors applied to text and icons. Text colors are identified by the letter T followed by a number sequence (e.g., T1, T2, T3).

Light Mode Dark Mode Name Usage
Grey 9
#223548
Grey 1
#F5F6F7
T1-Main on Primary Titles, Subtitles
Grey 7
#475E75
Grey 3
#D5DADD
T2-Support on Primary Body Text, Caption
Grey 6
#5B738B
Grey 4
#A9B4BE
T3-Minor on Primary Muted Text, Placeholder Text
Blue 7
#0070F2
Blue 5
#4DB1FF
T4-CTA on Primary Tinted Text, Links, Interactive Icons
Base White
#FFFFFF
Grey 11
#12171C
T5-Main on Secondary Text on S2-Secondary
Blue 5
#4DB1FF
Blue 7
#0070F2
T6-Main on Tertiary Text on S3-Tertiary
Blue 8
#0057D2
Blue 4
#89D1FF
T7-Selected Text Selected Text on S5-Selected Surface
Grey 9
#223548
Grey 1
#F5F6F7
T8-Main on Header Titles, Subtitles on Header
Grey 7
#475E75
Grey 3
#D5DADD
T9-Secondary on Header Body Text, Caption on Header
Grey 6
#5B738B
Grey 4
#A9B4BE
T10-Tertiary on Header Muted Text, Placeholder Text on Header
Blue 7
#0070F2
Blue 5
#4DB1FF
T11 - CTA on Header Tinted Text, Links, Interactive Icons on Header


Border Colors

Border colors are applied to any linear elements such as dividers or graphical elements used to define any areas within components. These colors range from neutral grey colors to interactive brand colors often used to communicate the state of a certain part of a component. Border colors are identified by the letter B followed by a number sequence (e.g., B1, B2, B3).

Light Mode Dark Mode Name Usage
Grey 3
#D5DADD
Grey 6
#5B738B 50%
B1-Section Divider Divider Lines
Grey 5
#8396A8
Grey 5
#8396A8
B2-Default Border Text Field Borders
Blue 7
#0070F2
Blue 5
#4DB1FF
B3-Selected Border Selected Text Field Borders
Blue 7
#0070F2, 28%
Blue 5
#4DB1FF, 36%
B4-Light Selected Border Transparent Selected Borders
Grey 6
#5B738B
Grey 4
#A9B4BE
B5-Border Switch Idle Switch Borders


Semantic Colors

Semantic colors are applied to any foreground or background elements such as text, icons, or backgrounds to communicate a component’s status, state, or level of priority. These colors are bright in hue to direct the user’s attention to a certain component or part of the UI. Semantic colors are identified by the following naming (e.g., negative label, critical label, positive label, and neutral label).

Light Mode Dark Mode Name Usage
Red 7
#D20A0A
Red 5
#FF5C77
Negative Label Semantic Label
Mango 7
#C35500
Mango 5
#FFB300
Critical Label Semantic Label
Green 7
#188918
Green 5
#5DC122
Positive Label Semantic Label
Blue 7
#0070F2
Blue 5
#4DB1FF
Informative Label Semantic Label
Grey 7
#5B738B
Grey 5
#A9B4BE
Neutral Label Semantic Label
Red 6
#EE3939, 8%
Red 6
#EE3939, 12%
Negative Background Semantic Background
Mango 6
#E76500, 8%
Mango 6
#E76500, 12%
Critical Background Semantic Background
Green 6
#36A41D, 8%
Green 6
#36A41D, 12%
Positive Background Semantic Background
Blue 6
#1B90FF, 8%
Blue 6
#1B90FF, 12%
Informational Background Semantic Background
Grey 6
#5B738B, 8%
Grey 6
#5B738B, 12%
Neutral Background Semantic Background


Accent Colors

Accent colors provide an additional level of color luminance and are used to accent areas of the UI such as avatars, icons, and decorative areas. These colors are bright in hue and provide visual variety to the UI. Accent colors are identified by the word “Accent” followed by a number sequence (e.g., Accent 1, Accent 2, Accent 3).

Light Mode Dark Mode Name
Mango 8
#A93E00
Mango 3
#FFDF72
Accent Label 1
Red 8
#AA0808
Red 3
#FFB2D2
Accent Label 2
Raspberry 8
#BA066C
Raspberry 3
#FECBDA
Accent Label 3
Pink 8
#A100C2
Pink 3
#FFAFED
Accent Label 4
Indigo 8
#470CED
Indigo 3
#D3B6FF
Accent Label 5
Blue 8
#0057D2
Blue 3
#A6E0FF
Accent Label 6
Teal 8
#046C7A
Teal 3
#64EDD2
Accent Label 7
Green 8
#256F3A
Green 3
#BDE986
Accent Label 8
Grey 8
#354A5F
Grey 3
#D5DADD
Accent Label 9
Mango 2
#FFF3B8
Mango 9
#8D2A00
Accent Background 1
Red 2
#FFD5EA
Red 4
#840606
Accent Background 2
Raspberry 2
#FFDCE8
Raspberry 3
#9B015D
Accent Background 3
Pink 2
#FFDCF3
Pink 3
#7800A4
Accent Background 4
Indigo 2
#E2D8FF
Indigo 3
#2C13AD
Accent Background 5
Blue 2
#D1EFFF
Blue 2
#0040B0
Accent Background 6
Teal 2
#C2FCEE
Teal 3
#035663
Accent Background 7
Green 2
#EBF5CB
Green 3
#1E592F
Accent Background 8
Grey 2
#EAECEE
Grey 3
#223548
Accent Background 9

Accessibility

The Horizon theme color palette offers color mapping logic that is easy to understand. It introduces eleven tonal values across nine color hues of vibrant and bold color. Our Horizon theme color palette ensures that color combinations comply with WCAG accessibility standards.

For more information, see Accessibility.

Color contrast ratio scale
Color contrast ratio scale

Elevation

Elevation plays a key role in the Horizon theme color palette. In light mode, the drop shadow represents the elevation of the components. However, in dark mode, elevated components are differentiated by changes in tone to mimic a range of depth. At lower elevations, the surface tone is darker, while at higher elevations the tone is lighter. Refer to the following table to understand elevation.

Light and dark theme elevation scale
Light and dark theme elevation scale

Themes

The Android design system includes systemwide appearance settings for light and dark modes which use color consistently and sparingly.


Light Mode

Light mode is the default mode for the Android design system. Light mode is a bright UI that displays dark grey foreground elements and saturated accent colors against light surfaces. In light mode, neutral colors are used to make content readable, and accent colors are used sparingly to call attention to important information or show the relationship between parts of the interface. Lastly, light mode is best used in bright environments where battery life isn’t an issue.

Light mode example
Light mode example

Dark Mode

Dark mode is the secondary mode for the Android design system. Dark mode is a dim UI that displays white foreground elements and desaturated accent colors against dark surfaces. In dark mode, all component surfaces and backgrounds are dark grey in color with tonal variations depending on a component’s elevation. Lastly, dark mode preserves battery life (especially on OLED screens) by reducing the usage of light pixels, helpful in scenarios where the user needs to reduce battery consumption.

Dark mode example
Dark mode example

Resources

Development: Theming and Styling

SAP Fiori for iOS: Colors

Related Components/Patterns: Accessibility

Persistent Footer

A persistent footer component is used for closing or finalizing actions that impact the current view. It is fixed at the bottom edge of the screen and comes in two different layouts: one for related actions with one or more buttons and one for opposite actions with two buttons and a helper/status text.

Persistent footer on mobile (left) and tablet (right)
Persistent footer on mobile (left) and tablet (right)

Usage

Do
  • Use the persistent footer if you need closing or finalizing actions.
  • Use descriptive and concise verbs as button labels.
  • Only use a primary button if your app has a clear primary action.
  • Use an overflow menu if your persistent footer requires more than two text buttons on mobile devices.
  • Use an overflow menu if your persistent footer requires more than three text buttons on tablets.
Don't
  • Don’t use the persistent footer if its action influences only specific items instead of the entire view.
  • Don’t wrap, truncate, or scale button labels.
  • Don’t combine icon-only and text-only buttons within a persistent footer.
  • Don’t combine icons and text in opposite action buttons.
  • Don’t use a helper text if your persistent footer has an overflow menu.
  • Don’t mix tertiary buttons with secondary or primary buttons within a persistent footer.
Information
Western readers usually scan a view in a Z-pattern – from left to right and top to bottom. As a result, the best position for a finalizing action is the bottom right side of a view.

Examples

Positive example of using contained buttons with text only for related actions
Positive example of using contained buttons with text only for related actions
Negative example of using a contained text button and a contained button with text and an icon for related actions
Negative example of using a contained text button and a contained button with text and an icon for related actions
Positive example of using a contained button that is supposed to be responsive to the container of the persistent footer
Positive example of using a contained button that is supposed to be responsive to the container of the persistent footer
Negative example of using a text button that is responsive to the complete width of the persistent footer container
Negative example of using a text button that is responsive to the complete width of the persistent footer container
Positive example of using buttons that include text and an icon for opposite actions
Positive example of using buttons that include text and an icon for opposite actions
Negative example of using contained buttons to display text and an icon for opposite actions
Negative example of using contained buttons to display text and an icon for opposite actions
Positive example of combining a primary button with a tonal secondary button
Positive example of combining a primary button with a tonal secondary button
Negative example of using text buttons for primary and secondary actions
Negative example of using text buttons for primary and secondary actions
Positive example of using only one primary button and moving the secondary button to the overflow menu because the button label would be too long
Positive example of using only one primary button and moving the secondary button to the overflow menu because the button label would be too long
Negative example of using a secondary button with a truncated text label because it is too long to be displayed
Negative example of using a secondary button with a truncated text label because it is too long to be displayed

Anatomy

Related Actions

A. Container

The persistent footer container contains one or more buttons. The persistent footer is always visible, even when users scroll down.

B. Overflow Icon

If the persistent footer has more than two text buttons on mobile, the additional text buttons move into an overflow menu.

On tablets, the overflow is displayed if there are more than three text buttons.

The most important actions are displayed first in the overflow menu, which opens at a higher elevation than the persistent footer.

C. Secondary Button

The secondary button should indicate actions that are not the primary action. If the view does not have a clear primary action or if the displayed actions are of equal importance, the persistent footer can consist only of secondary buttons. Use the secondary style only if there are two or more buttons within the persistent footer.

D. Primary Button

The primary button indicates the most important action. Display only one primary action for the entire view. If the persistent footer has only one button, we recommend formatting the button in primary style.

Anatomy of persistent footer with related actions
Anatomy of persistent footer with related actions

Opposite Actions

A. Container

The persistent footer contains two buttons.

B. Left Action

The left action is used for an action that is not the primary action.

C. Helper/Status Text

The helper/status text gives contextual information about the opposite actions.

D. Right/Primary Action

The right/primary action indicates the most important action.

Anatomy of persistent footer with opposite actions
Anatomy of persistent footer with opposite actions

Behavior and Interaction

Buttons

Buttons provide short and meaningful text. For maximum legibility, label text should remain on a single line.

Button Styles and States

To help users distinguish between different actions, you can use the Horizon button styles, such as contained tint for positive primary actions and tonal semantic for negative secondary actions. All the different button states are also supported.

Related actions with a right-aligned contained tint button for a positive primary action and a tonal semantic button for a negative secondary action
Related actions with a right-aligned contained tint button for a positive primary action and a tonal semantic button for a negative secondary action

Overflow Menu

Tapping on the overflow button opens a menu with additional actions.

Text Buttons

On mobile devices, a maximum of two text buttons can be displayed in the persistent footer. If the persistent footer has more than two text buttons, the additional text buttons move into an overflow menu, where the most important actions are displayed first.

On tablets, the overflow menu is displayed if there are more than three text buttons.

User interaction of tapping the overflow button which opens a menu with additional actions
User interaction of tapping the overflow button which opens a menu with additional actions

Adaptive Design

The toolbar spacing follows the global layout margins of the Android size classes. It uses 100% of the screen width.

On mobile devices, the buttons are equally distributed across the container of the persistent footer. On tablets, the buttons are aligned to the right side of the container to provide convenient access to the buttons.

The persistent footer hides once a keyboard is on screen.

Persistent footer on mobile (left) and on tablet (right)
Persistent footer on mobile (left) and on tablet (right)

Variations

Related Actions

Primary Contained Button and Secondary Tonal Button

The primary contained button and the secondary tonal button are best used for two related actions.

The primary action is placed in a contained button to the right of the screen. The secondary action is placed in a tonal button to the left of the primary action.

Optionally, the primary contained and secondary tonal button can be combined with a leading icon and an overflow menu if there are more than two actions on mobile or more than three actions on tablet devices.

Primary Contained Right-Aligned Button

The primary right-aligned button indicates a single primary action and should be formatted as a contained button to the right of the screen.

Optionally, the primary right-aligned button can have a leading icon.

Primary Contained Center-Aligned Button

The primary center-aligned button indicates a single primary action and should be formatted as a contained button that spans across the full width of the screen.

Optionally, the primary center-aligned button can have a leading icon.

Persistent footer with a primary contained button with an icon and secondary tonal button with an icon (top), a primary right-aligned button (middle), and a primary center-aligned button (bottom)
Persistent footer with a primary contained button with an icon and secondary tonal button with an icon (top), a primary right-aligned button (middle), and a primary center-aligned button (bottom)

Opposite Actions

When using two buttons that give users opposite options, the buttons are placed left and right of the persistent footer, with an optional helper/status text in the middle, to emphasize the different opposite actions, such as “Agree” and “Disagree”.

Information
For opposite actions, we don’t recommend combining icons and text due to space limitations.

Icon Buttons

Icon buttons indicate two opposite actions and can have an optional helper text in the middle.

Left-Aligned Secondary Tonal Button and Right-Aligned Primary Contained Button

The left-aligned secondary tonal button and the right-aligned primary contained button indicate two opposite actions and can have an optional helper text in the middle.

Text Buttons

Text buttons are used for actions of equal importance and can have an optional helper text in the middle.

Persistent footer with icon buttons (top), left-aligned secondary tonal button and right-aligned primary contained button (middle), and text buttons with helper text (bottom)
Persistent footer with icon buttons (top), left-aligned secondary tonal button and right-aligned primary contained button (middle), and text buttons with helper text (bottom)

Resources

Development: PersistentFooter

SAP Fiori for iOS: Toolbar

SAP Fiori for Web: Footer Toolbar

Related Components/Patterns: Buttons

Data Table

The data table is a grid layout of columns and rows showing labeled data, such as numbers, text, and images.

On mobile, a horizontal scrollable data table with a sticky header is available. Alternatively, the data table will be converted to object cells by default on mobile if horizontal scrolling is disabled.

Data table on mobile (left) and tablet (right)
Data table on mobile (left) and tablet (right)

Usage

Do
  • Use data tables when the user needs to compare multiple sets of data across items in a large data set.
  • Use data tables as a tool to query, consume, and navigate to specific data.
  • Use data tables if there are at least two columns or more of data parameters.
Don't

Don’t use data tables when the user doesn’t need to compare multiple attributes across items.

Anatomy

A. Header Rows
Located at the top of each column is a label. It’s recommended for the data table to have at least three columns.

B. Data Rows
Follows after the header row. There is no maximum number of data rows.

C. Sticky Horizontal Column (Optional)
The first column can be sticky (mobile only).
The sticky column’s maximum width is 30% of the screen width in order to not take up too much space. Any content that is longer will be truncated.

D. Divider (Optional)
Between the first and second column a divider can be displayed. If the first column is set to sticky (Mobile only), a divider must be added.

E. Chevron Column
The user can tap on a row or on the chevron to navigate to the row details.

Data table anatomy
Data table anatomy

Text Alignment

The text alignment within the columns depends on the type of content to maximize legibility.

Left aligned: 

  • The first column (from the left)
  • Text value column
  • String value column

Right aligned:

Numeric value column, such as currency, distance, or time duration.

Text alignment in table cell
Text alignment in table cell



Dynamic Width Column

  • The dynamic column takes up all the remaining space after the widths of the other columns are determined.
  • A row contains only one dynamic column.
Table columns with dynamic width
Table columns with dynamic width



Maximum Height of a Row

  • The maximum number of lines of text is two. Users can choose to determine max-height of text line as one or two.
  • If the text is longer than the maximum number of lines, the text will be truncated.

Maximum Width of a Column

  • If there are more than two columns, any one column will have a maximum width including padding of 50% of the screen width to avoid a column to take up too much space. This width can be overridden.
  • If the content exceeds the width of the column, the content will be truncated or switched to a two line if the data table is set to two lines.
Maximum height of a row and maximum width of a column
Maximum height of a row and maximum width of a column



Behavior and Interaction

Scrolling

The header stays at the top as the user scrolls. A drop shadow will appear once the user scrolls to differentiate the header and data rows.

Horizontal, vertical, and diagonal scrolling are available to allow for flexibility.

Horizontal scrolling
Horizontal scrolling
Vertical scrolling
Vertical scrolling
Diagonal scrolling
Diagonal scrolling

Push to View

The user can tap on any row to see the row details in a key object cell view.
This allows users to be able to see the full row at once, or view the full text of any truncated text.





Opening the key object cell view
Opening the key object cell view

Inline Edit

In the inline edit mode, users can edit multiple lines without opening the key object cell view. To activate the inline edit mode, users have to tap on the “Edit” icon in the top app bar.

When the inline edit is activated, the chevron column on the right is hidden and it is not possible to open the key object cell view while editing. The user can tap on a cell to select it. The selected cell gets highlighted with a blue border.

The inline edit mode is available for text, list picker and time picker.

Activate the inline edit mode and select a text cell
Activate the inline edit mode and select a text cell

If there is an invalid entry, the cell is highlighted in red and a banner with an error message pops up. If the user deselects the cell, the error is still visible with a red underline and a banner with an error message is displayed.

Invalid cell entry and banner with error message while cell is selected (left) and cell is deselected (right)
Invalid cell entry and banner with error message while cell is selected (left) and cell is deselected (right)

To save the changes, users have to tap on the “Save” button in the top app bar. We recommend showing a snackbar with a confirmation message stating that new changes have been saved.

If users want to discard the new changes, they must tap on the “x”.
A dialog appears and the users have to confirm that they want to discard all changes.

Discard changes in the inline edit mode
Discard changes in the inline edit mode

Resources

Development: DataTableView

SAP Fiori for iOS: Data Table

Typography

SAP Fiori for Android type system maps SAP’s 72 typeface to Material Design’s type hierarchy. This respects the established visual harmony of Material Design’s components while introducing SAP Fiori’s unique visual identity.

SAP Fiori for Android 72 type system
SAP Fiori for Android 72 type system

72 Typeface

SAP Fiori for Android uses SAP’s proprietary 72 typeface to maintain consistency with other SAP products. In addition, the 72 typeface has been designed to meet the typographic requirements needed for the enterprise. 72 typeface adheres to the following principles:

  • Legibility enhancements: Optimized for screen use
  • Font styles: Supports a robust typographic hierarchy
  • Brand voice: Be credible and humane
  • Character set: Accommodate complex content
  • Language support: Supports the Windows Glyph List
  • Accessibility: Improved character recognition

Resources

Download: 72 Font

Information: 72 Showcase

Material Design: The Type System

Iconography

SAP icon library
SAP icon library

SAP icons have been redesigned for the Horizon visual theme with a fresh, friendly, and bold style. The new icons maintain consistency of size, stroke, and visual balance and are tailored for simple and direct user interaction, using metaphors that are easy to understand in an enterprise setting.

Usage

Do
  • Use the SAP icon library.
  • Use icons to highlight important actions for users.
  • Use icons to indicate navigation actions to other screens.
  • Use icons that are clear to the user
Don't
  • Don’t use different-sized icons.
  • Don’t use third-party icons.
  • Don’t use icons that are ambiguous.

Design Language

The SAP icon library communicates the following SAP Design principles:

  • Simple 
  • Fresh 
  • Neutral
  • Modern 

Icon Grid

The standard size of SAP Icons is based on a 24dp grid. This grid size is used to design SAP icon used within our components and is based on the increment system. The 24dp area serves as a container where the actual icon graphic sits.

24 x 24 grid (1X scale)
24 x 24 grid (1X scale)
24 x 24 grid (10X scale)
24 x 24 grid (10X scale)


Live Area

SAP icons are designed within a 20dp x 20dp live area. This means that the icon has top and bottom paddings within the icon itself and ensures a sense of break between icon and any other UI elements.

Live area, designated space for your icon
Live area, designated space for your icon
Padding space, to provide ample space around your icon
Padding space, to provide ample space around your icon


Pixel Alignment

When designing custom icons, ensure that icons use full pixels. This means they should have whole number units, with no decimals to maintain clarity on screens with high pixel density.

Do
Aligned icon showing crisp edges
Aligned icon showing crisp edges

Use full pixel units when designing custom icons. This means pixels should have whole number units, with no decimals to maintain clarity on screens with high pixel density.

Don't
Misaligned icon showing blurred edges
Misaligned icon showing blurred edges

Don’t design custom icons where pixel units fall in between pixels, these are called half pixels. Half-pixeled units will look blurry on screens with high pixel density.

Resources

SAP Icons: SAP UI5 Icon Explorer

Layout: Increment System

SAP Fiori Design Principles

SAP Fiori provides a consistent and holistic user experience for SAP software. By creating visually pleasing designs with a strong focus on ease of use, the experience is intuitive and simple, across all devices. With effortless interaction patterns, the SAP Fiori UX is designed for a powerful impact across your enterprise.

Design Principles

The design philosophy of SAP Fiori is based on five core principles: role-based, delightful, coherent, simple, and adaptive.

Role-Based

SAP Fiori is designed for your business, your needs, and how you work. It draws from our broad insights on the multifaceted roles of today’s workforce. SAP Fiori provides the right information at the right time and reflects the way you actually work.

Delightful

Apart from making you work smarter, SAP Fiori also enriches your work experience by allowing you to simply do your job.

Coherent

Whether you fulfill a sales order, review your latest KPIs, or manage leave requests – SAP Fiori adheres to a consistent interaction and visual design language. Across the enterprise, you enjoy the same intuitive and consistent experience.

Simple

With SAP Fiori, you can complete your job intuitively and quickly. SAP Fiori helps you focus on what is important – essential functions are easy to use, and you can personalize the experience to focus on your relevant tasks and activities.

Adaptive

SAP Fiori enables you to work how and where you want, regardless of the device you use. And, it provides relevant information that allows for instant insight.

Snackbar

A snackbar provides a brief message about the performance of a process at the bottom of the screen.

Snackbar
Snackbar

Usage

A snackbar provides updates of a process that an app has performed or will perform. They appear temporarily, towards the bottom of the screen and disappears on without requiring the user’s dismissal.

Do
  • Create text labels that are short and clear.
  • Distinguish the action from the text label.
  • Use the third line to display actions with longer text.
  • Use different colors for the text label and the text button.
Don't
  • Don’t use icons in snackbar.
  • Don’t add more than one text button.
  • Don’t use a contained button
  • Avoid stacking snackbars on top of one another.

Variations

Snackbar with Text Label

The message on the snackbar directly relates to the process being performed, for example, files have been moved, item added to cart. The text label can have one or two lines of text.

Snackbar containing a one-line message (top) and two lines message (bottom)
Snackbar containing a one-line message (top) and two lines message (bottom)

Snackbar with Action

Snackbars can display a single text button that allows users to take action on a process performed by the app. To distinguish the action from the text label, the action text should be tinted.

Snackbar with button
Snackbar with button

Behavior and Interaction

A snackbar appears at the bottom of the screen and does not require the user’s dismissal. It appears momentarily and dismisses itself after 4-10 seconds.

Consecutive Snackbars

When multiple app updates are necessary, snackbars should appear one at a time.

User interaction with snackbar
User interaction with snackbar

Resources

Development: Snackbar, Snackbar

SAP Fiori for iOS: Toast Message

Material Design: Snackbars

Progress Indicators

Progress indicators keep users informed about the status of ongoing processes, such as logging in, uploading files, or refreshing content. They communicate the state of an app and indicate available actions, such as whether users can navigate away from the current screen.  

Login screen with linear progress indicator (left), uploading files (middle), content refresh with circular progress indicator (right)
Login screen with linear progress indicator (left), uploading files (middle), content refresh with circular progress indicator (right)

Usage

Do
  • Use progress indicators if the wait time takes longer than one second. 
  • Use only one indicator type for each activity in an app, for example, if a circular indicator represents a refresh action on a screen, a linear indicator should not be used for the same action elsewhere in the app. 
  • Keep labels short – we recommend one line of text. 
  • For determinate indicators, include a progress value, for example, 60%, 30/100, at the end of the label. 
  • It is mandatory to use labels for error and success states.
Don't
  • Don’t transition from a linear to a circular progress indicator or vice versa. 
  • Don’t use labels when a loading process takes less than 10 seconds, or when the height or the width is too constrained.  
  • Try to avoid using progress indicators with two lines of text. Wrapping is not recommended and is only available for compact window sizes. 
  • Don’t display a progress value for the error/fail and success states. 

Anatomy 

Active State

A. Indicator

B. Track

C. Label (Optional)

Anatomy of determinate and indeterminate linear progress indicators in active state
Anatomy of determinate and indeterminate linear progress indicators in active state
Anatomy of determinate and indeterminate circular progress indicators in active state
Anatomy of determinate and indeterminate circular progress indicators in active state

Value State

A. Indicator (Hidden by Track)

B. Track

C. Validation Message

Anatomy of linear progress indicators in error/fail (left) and success state (right)
Anatomy of linear progress indicators in error/fail (left) and success state (right)
Anatomy of circular progress indicators in error/fail (left) and success state (right)
Anatomy of circular progress indicators in error/fail (left) and success state (right)

Behavior and Interaction 

Text Wrapping (Only for Mobile)  

Labels are optional and should only be used when the process takes 10 seconds or more. They should be concise and, ideally, not exceed one line of text.  

If the length of the text exceeds the available space, the text wraps into the next line and the progress indicator will keep its position on the top. Wrapping is not recommended and is only available for mobile window sizes ranging from 0-599 dp. Labels can’t exceed two lines of text. 

Text wrapping examples of linear progress indicator (left) and circular progress indicator (right)
Text wrapping examples of linear progress indicator (left) and circular progress indicator (right)

Value States

Error/Fail State 

If an error occurs or a process fails, the loading animation stops. The indicator turns red and the entire track fills with the error color. 

Error/fail state behavior of a linear progress indicator
Error/fail state behavior of a linear progress indicator
Error/fail state behavior of a circular progress indicator
Error/fail state behavior of a circular progress indicator

Success State

The success state appears after the successful completion of a process or request. The indicator turns red and the entire track fills with the success color.

Depending on the use case, you can choose one of the following options for the success indicator 

  • Persisting until the user triggers another action, such as closing or changing screens 
  • Disappearing after 3 seconds 

 

 

Success state behavior of a linear progress indicator
Success state behavior of a linear progress indicator
Success state behavior of a circular progress indicator
Success state behavior of a circular progress indicator

Swipe-to-Refresh (Circular Progress Indicator Only)

The circular loading indicator appears at the top of the existing content when the user triggers the content refresh by swiping down the page. This action loads new data from the server and displays it in the interface. The indicator disappears once the loading process is complete, or when the user navigates away from the content that is being refreshed.

The swipe-to-refresh behavior should be used with dynamic content sorted in descending order. In these cases, the most recent content always appears on top. Common examples are inboxes sorted by descending date, or other types of lists and card collections.

Swipe-down behavior of the circular progress indicator
Swipe-down behavior of the circular progress indicator

Scroll Up to Load (Circular Progress Indicator Only)

The circular loading indicator appears at the bottom of the existing content when a user scrolls beyond the end of the data that the application has loaded in memory. The indicator disappears when the loading process is complete, or when the user navigates away from the content that is being refreshed.

 Scroll-up behavior of the circular progress indicator
Scroll-up behavior of the circular progress indicator

Variations 

Linear Progress Indicator 

Linear progress indicators display progress by animating an indicator along the length of a fixed, visible track. The behavior of the indicator is dependent on whether the progress of a process is known. 

A. Determinate 

Determinate linear progress indicators display how long a process will take. They should be used when the process can be completed within a specified amount of time. They fill from 0% to 100% and never decrease in value. For example, downloading/uploading a file of known size. 

Determinate linear progress indicator
Determinate linear progress indicator

B. Indeterminate 

Indeterminate linear progress indicators express an indefinite waiting time. They should be used when the process completion can’t be determined, or when it is not necessary to indicate how long an activity will take. It conveys that a user’s action, request, or data is being processed. 

Indeterminate linear progress indicator
Indeterminate linear progress indicator

C. Indeterminate to Determinate 

The indicator can switch from an indeterminate state to a determinate state. It should be used when an indeterminate process reaches a point where its duration can be determined, and the loading animation can be stopped. 

Linear progress indicator (indeterminate to determinate)
Linear progress indicator (indeterminate to determinate)

D. With Label 

  • Labels are optional to communicate the status and progress. If there is nothing to communicate, having no label is valid. 
  • Only include labels to give extra context or to provide useful information, for example, what information the progress bar is processing. Avoid using terms such as “loading” that don’t add any value.  
  • If the label is comprised of one or more sentences, use sentence-style capitalization.
  • We recommend including a progress value, for example, 60%, 30/100, at the end of the label for determinate indicators to show how much of the process is already completed, the current progress, and how much is remaining. 
  • The display of the progress value is under application control. The application should be able to turn the progress value off. 
  • Keep labels short – we recommend one line of text. 
Linear progress indicator with label
Linear progress indicator with label

Circular Progress Indicator

Circular progress indicators display progress by animating an indicator along an invisible circular track in a clockwise direction. They can be applied directly to a surface or a card. 

A. Determinate

The determinate circular indicator moves from 0 to 360 degrees along an invisible circular track and fills it with color. Use this variation when the process completion can be determined.

Determinate circular progress indicator
Determinate circular progress indicator

B. Indeterminate

Indeterminate circular progress indicators grow and shrink in size as they move along an invisible track. They should be used when the process completion can’t be determined, or when it is not necessary to indicate how long an activity will take.  

Indeterminate circular progress indicator
Indeterminate circular progress indicator

C. Indeterminate to Determinate

The indicator can switch from an indeterminate state to a determinate state. It should be used when an indeterminate process reaches a point where its duration can be determined and the loading animation can be stopped.

Circular progress indicator (indeterminate to determinate)
Circular progress indicator (indeterminate to determinate)

C. With Label

  • Labels are optional to communicate the status and progress. If there is nothing to communicate, then having no label is valid.
  • Only include labels to give extra context or to provide useful information. For example, what information the progress bar is processing. Avoid using terms such as “loading” that don’t add any value.
  • Use sentence style capitalization.
  • We recommend including a progress value, for example, 60%, 30/100, etc., at the end of the label for determinate indicators to show how much of the process is already completed, the current progress, and how much is remaining.
  • The display of the progress value is under application control. The application should be able to turn the progress value off.
  • Keep labels short – we recommend one line of text.
Circular progress indicator with label
Circular progress indicator with label

States 

The following states are available for indeterminate and determinate progress indicators. Keep in mind that the error/fail and success states should not display a progress value. 

Error/Fail State 

The error/fail state indicates that an action or request could not be completed successfully. Labels are mandatory and should always inform the user what kind of error/fail happened and how this issue can be resolved. The message should be as concise as possible. Follow the guideline for indicators with a label. 

Linear progress bar with one-line error message (left) and two-line error message (right)
Linear progress bar with one-line error message (left) and two-line error message (right)
Circular progress indicator with one-line error message (left) and two-line error message (right)
Circular progress indicator with one-line error message (left) and two-line error message (right)

Success State 

The success state indicates the successful completion of a process or request. Labels are mandatory for the success message and should be concise. A short information about the completed process or the executed action is sufficient, for example, “Download completed”. One line of text is recommended. 

Linear progress bar with one-line success message (left) and two-line success message (right)
Linear progress bar with one-line success message (left) and two-line success message (right)
Circular progress indicator with one-line success message (left) and two-line success message (right)
Circular progress indicator with one-line success message (left) and two-line success message (right)

Resources

Menus

A menu displays a list of relevant options for the user that can be triggered from buttons, icons, or actions.

Example of a menu on a compact device (left) and a medium/expanded device (right)
Example of a menu on a compact device (left) and a medium/expanded device (right)

Usage

A menu enables users to view and select from a group of choices. A menu container is opened by the user tapping on an interactive element, for example, an overflow icon.

Do
  • Use a menu when the number of actions exceeds the component’s action limit.
  • Ensure it is simple for users to open, close, and select from the menu, with the most prominent actions shown first.
  • Ensure the menu is placed on the screen where the content is fully visible to users.
Don't
  • Don’t use a menu for a single action.
  • Don’t hide important actions.
  • Don’t place the menu in a position where it will be cut off by the screen. Instead, set the menu above, left, or right of the interactive element.
An example of a top app bar that makes all additional actions available in a dropdown menu
An example of a top app bar that makes all additional actions available in a dropdown menu
An example of a top app bar that only has one action available in the dropdown menu
An example of a top app bar that only has one action available in the dropdown menu
An example of a menu that has a clear entry point and shows the highest priority actions first
An example of a menu that has a clear entry point and shows the highest priority actions first
An example of a menu that displays the highest priority actions last and makes the user scroll to find those actions
An example of a menu that displays the highest priority actions last and makes the user scroll to find those actions
An example of a menu that is placed next to the interactive element that populates it and is fully visible on the screen
An example of a menu that is placed next to the interactive element that populates it and is fully visible on the screen
An example of a menu that is placed near the interactive element but cuts off some of the list options with the higher container placement
An example of a menu that is placed near the interactive element but cuts off some of the list options with the higher container placement

Anatomy

A. Menu Container

A menu container holds all of the menu items available for a user to choose from.

B. List Item

A list item includes a required label, in addition to an optional leading or trailing icon.

C. Divider (Optional)

A menu can optionally contain a divider to visually group list items together.

Menu anatomy
Menu anatomy

Behavior and Interaction

Dropdown Menu

A dropdown menu is a list of options that a user can act on. It appears after a user taps on an icon or a button or performs a specific action.

A dropdown menu normally appears below the element that generates it.

A dropdown menu triggered by an overflow icon button
A dropdown menu triggered by an overflow icon button

Scrolling

A menu can scroll if the number of list items exceed the max height of the menu container.

A menu shorter in height that allows the user to scroll through all the list items available
A menu shorter in height that allows the user to scroll through all the list items available

Adaptive Design

There are situations where it is beneficial to replace a bottom sheet with a menu on medium and expanded size classes.

Replace the bottom sheet with a menu when the list of options needs to be closer in proximity to the element the choices affect. This helps the user draw a direct relationship between the list items and the primary content where they are populated. Continue using the bottom sheet on medium and expanded size classes when the inputs affect the overall page’s view versus a single element on the page.

A menu on a medium/expanded device that visually connects the list options and the affected object by placing the menu close to the overflow icon.
A menu on a medium/expanded device that visually connects the list options and the affected object by placing the menu close to the overflow icon.

Variations

A menu item can contain a leading or trailing icon, extending the menu’s flexibility to support various use cases.

Menus showing different usage examples of leading and trailing icons.
Menus showing different usage examples of leading and trailing icons.

Resources

Development: DropdownMenu, ExposedDropdownMenu, DropdownMenu

Material Design: Menus

Get Started

SAP Fiori for Android is made up of a wide variety of design foundations, components, and patterns that is packaged together in a harmonious system. Learn more about each detail to understand how you can use it for your own application.

Foundation of SAP Fiori for Android

Get started with our rich library of foundations, components, patterns, and more!
Get started with our rich library of foundations, components, patterns, and more!

 

SAP Fiori Design Principles

Learn about the design principles that make up SAP Fiori and how it is essential for creating effective and engaging apps.

 

Type System

Typography plays a crucial role in establishing hierarchy in the content with great legibility and scalability. Discover how SAP Fiori for Android utilizes SAP Fiori’s new proprietary font.

 

Colors

Color is essential in setting a delightful Fiori-based user experience that guides the user through the functions of the application in a concise manner. Find out more about the color palette to understand how to use it effectively.

 

Iconography

The icons of SAP Fiori for Android follow the Material Design icon system. In the case that there is a need for a custom icon, check this guide for creating your own.

 

Layout

The layout of the app follows certain logic that makes the app accessible, scalable, and readable. Components are designed in increments that make it easier to scale between different devices. Keylines are device-specific lines where content is aligned in order to maintain consistency in composition within an interface. Learn about the rules behind the layout to create an organized and clean interface.

 

Material Design

Material Design, Google’s design language, is used for all Google-developed native Android apps and has recently been updated to a more modern design system. SAP Fiori for Android applies the latest Material Design practices to bring the freshest UI and UX design principles to your SAP Fiori for Android application. Check out the new Material Design guidelines for more information on their updated design language.

UI Components

Components are the building blocks for any SAP Fiori for Android application. Each component serves a unique functional purpose to meet the application requirements.

 

Basic Components

Basic Components are a group of components that follow exactly how Material Design defines them as they with the Fiori theming.

Banners
Bottom Sheet

Buttons
Dialogs
Menus
Pickers
Progress Indicators
Snackbar

 

Cards

Cards are a summarized view into an object or objects. It can support a variety of different content based on the needs of the user depending on the card type.

 

Form Cells

Form Cells are components that the user can interact with for making decisions or providing information. There are several types of different inputs, depending on what the user needs to provide.

Checkboxes
Chips
List Picker Form Cell
Radio Button
Signature Form Cell
Sliders
Switches
Text Inputs
Time Picker Form Cell

Patterns

Patterns define how you can use designs – from how they function to how the user moves within a specific flow from screen to screen.

Resources

Download the design kits to start designing your own SAP Fiori for Android app.

 

Resources

Download/access our design stencils and font files to start designing your own SAP Fiori for Android app.

Buttons

Buttons allow users to perform actions, make decisions, or begin a process. The label of a button communicates the action that it is going to initiate.

Examples of different buttons
Examples of different buttons

Usage

Buttons should only be used for actions. Avoid using too many buttons – if users have too many options, it is difficult for them to decide. If you want the user to select one option from a small group or to provide access to specific categories, offer a segmented control instead of a button.

Do
  • Buttons should be easy to find within the UI.
  • Use simple and concise wording to describe a button’s action.
  • Use a button type in accordance with its visual hierarchy.
Don't
  • Do not wrap text inside a button, as a text label should remain on a single line.
  • Do not stack buttons above each other. Place them side by side.
  • Avoid text labels that are too long. They need to be concise.


Anatomy

A button consists of an icon (optional), a label, and a container.


A. Icon (Optional)

The Icon is a visual glyph that supplements text in instances where additional context is needed.

B. Label

The label is the textual content that describes the button’s action to the user.

C. Container

The container is a rectangular shape that wraps the button’s contents.

Anatomy of a button
Anatomy of a button


Behavior and Interaction

Button States

Buttons have several states that provide visual feedback on a button’s interaction.

A. Enabled State

Communicates a button’s default state.

B. Hover State

Indicates that the button is a hover target when the cursor is over the button.

C. Focus State

Indicates that the button is focused when navigating with a keyboard.

D. Pressed State

Communicates that the button has been pressed.

E. Disabled State

Discloses that the button has been disabled.

Button states from left to right: enabled (A), hover (B), focus (C), pressed (D), disabled (E)
Button states from left to right: enabled (A), hover (B), focus (C), pressed (D), disabled (E)


Variations

There are three different variations of buttons that provide different levels of visual hierarchy. The following are three button variations:

A. Contained

B. Tonal

C. Text



Example showing contained (A), tonal (B), and text (C) button variations
Example showing contained (A), tonal (B), and text (C) button variations

Contained Buttons

Contained buttons have a saturated background color making them the buttons with the highest prominence. Use contained buttons for the most important actions in a user’s workflow.



Contained button in the persistent footer
Contained button in the persistent footer

Tonal Buttons

Tonal buttons are used to add more emphasis than text buttons without the visual prominence of a contained button. Use tonal buttons to represent actions that are significant in a user’s workflow.



Tonal buttons used in a card and table preview
Tonal buttons used in a card and table preview

Text Buttons

Text buttons are used for less important actions in the UI. Use text buttons for secondary actions that supplement a user’s workflow. 



Text button used in a section footer
Text button used in a section footer


Size Variations

Buttons are by default dynamic in width and are dependent on the container they are placed in, but they can also be set to a fixed width and height. The touch area of a button should not be less than 48dp.


A. Auto-Width Buttons

The button container of an auto-width button grows automatically to fit the size of the text. Auto-width buttons have by default a fixed height of 48dp. We recommend using auto-width buttons within components, for example, within the object cell.

B. Standalone Buttons

We recommend buttons with a fixed width of 201pt and 48dp height for standalone pages, such as onboarding or sign-in screens.

C. Full-Width Buttons

For vertical button stacks we recommend using full-width buttons which lead to a padding of 16pt on the left and right side of the button. Per default, full-width buttons have a width of 343pt and a height of 48dp

Auto-width button (A), standalone button (B), and full-width button (C)
Auto-width button (A), standalone button (B), and full-width button (C)


Button Styles

Button styles play alongside the button types to add another layer of complexity to the UI. The following are the Horizon button styles:

A. Tint

B. Neutral

C. Negative (Semantic)

Tint (A), neutral (B), and negative buttons (C)
Tint (A), neutral (B), and negative buttons (C)


A. Tint

The tint button style can emphasize available actions and encourage users to interact with them. The primary button’s default style is not different from the tint one.

1. Usage Contained

Use contained tint for primary actions. Only one action on the screen should be styled in the primary style.

2. Usage Tonal

Use tonal tint if there are several actions with the same importance. If it is used in combination with negative actions, it can be used for positive actions.

3. Usage Text

Use the text tint style if the action is placed within the navigation bar or if it has the lowest priority compared to other actions on the screen.

B. Neutral

The neutral button style reflects an intermediate level of visual hierarchy. The neutral button style can be used for actions that have a medium priority.

1. Usage Tonal

Use tonal neutral style if you have multiple buttons within a view and want to visually highlight the priority of the different actions. Tint style always reflects a higher importance than neutral style. The usage depends on the context of the app and needs to be decided on app level.

2. Usage Text

Use text neutral for actions with a low importance. However, the usage depends on the context of the app and needs to be decided on app level.

C. Semantic (Negative)

The negative button style indicates destructive actions and warns users to take extra precautions when interacting with the buttons.

1. Usage Tonal

Use tonal negative if there are several actions with the same importance and one or more of them are negative, app designers can style the negative button in the tonal negative style.

2. Usage Text

Use text negative style if there are several negative actions within the page, for example, within several object cells, or if the negative button has the lowest importance.



Button examples for a positive, negative, and neutral action
Button examples for a positive, negative, and neutral action

Resources

Development: FioriTonalButton, FioriFilledButton, FioriTextButton, FioriFilledIconButton, FioriTonalIconButton, FioriStandardIconButton, MaterialButton

SAP Fiori for iOS: Buttons

SAP Fiori for Web: Button

Material Design: Buttons

Related Components/Patterns: Persistent Footer