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 summarizes the content within that section. It is used to organize screen content into logical parts, making it easier for users to navigate and understand the information. Headers should be brief and concise, allowing users to quickly identify what each section contains.

Section header in forms: compact screen (left) and expanded screen (right)
Section header in forms: compact screen (left) and expanded screen (right)

Anatomy

A. Header

The header indicates what the section contains.  

Information
The header can be used as a section header or footer. 

When the header is used as a section header, a section title is required. When it is used as a section footer, a section title is optional.

B. Button (Optional)

The button enables users 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 compact screen
Section header on compact screen

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

Section Footer

A section footer provides additional actions or information at the bottom of a group section. It supports various layouts, including a left-aligned button, right-aligned button, two opposite buttons, and text only, with flexible positioning to adapt to different use cases. 

Section footer with left-aligned button (top) and right-aligned button (bottom)
Section footer with left-aligned button (top) and right-aligned button (bottom)
Section footer with left-aligned button and header (top) and right-aligned button and header (bottom)
Section footer with left-aligned button and header (top) and right-aligned button and header (bottom)
Section footer with left-aligned and right-aligned buttons
Section footer with left-aligned and right-aligned buttons

Sliders

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

Sliders on compact (left) and expanded screens (right)
Sliders on compact (left) and expanded screens (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 control 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. Handle

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

Anatomy of a slider control
Anatomy of a 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 a slider form cell
Anatomy of a 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 compact (top) and expanded screens (bottom)
Slider on compact (top) and expanded screens (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 workflow, located at the end of the form. All the attached files should be associated with a certain business object.

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

Anatomy

Basic Anatomy

A. Header

The header is at the top of the attachment form cell and includes a label, a counter, and an icon or a text button.

B. Attachment Cells

The attachment cells display the attached files. Each item represents one attachment. Attachments can be displayed in a list or a multi-row grid view.

C. Footer (Optional)

The optional footer includes a “See All (n)” button, where n stands for the total number of items in the list. It should be placed below the attachment cells when the number of displayed items is set to a limited number.

D. Helper Text (Optional)

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

Anatomy of attachment form cell in list and grid view
Anatomy of attachment form cell in list and grid view

Edit Mode

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

Attachment Header

A. Text Label

The text label indicates the name of a 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. Mandatory Field Indicator (Optional)

If the attachment form cell is a mandatory field, it is indicated by an asterisk (*). 

D. “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

The 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.

E. “Delete” Icon

Tapping the “Delete” icon deletes the item.

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

The text label indicates 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. Mandatory Field Indicator (Optional) 

If the attachment form cell is a mandatory field, it is indicated by an asterisk (*). 

D. “View Switcher” Icon (Optional)

The “View Switcher” 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

The 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, we recommend truncating it in the middle to keep the file type visible. The full file name can be retrieved by tapping on the attachment cell that opens the file viewer or a detailed view depending on the app or user device.

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, then truncates. The full file name can be retrieved by tapping on the attachment cell that opens the file viewer or a detailed view depending on the app or user device.

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

Uploading Attachments

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

On compact screens, this triggers a bottom sheet that lists 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 a 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.

The number of attachments that a user is allowed to upload can be limited. When reaching the upload limit, the Add button becomes disabled. We recommend displaying a message in the section header to inform the user about the limit. You can also add a helper text below the attachments to display a hint message, but if the list of attachments becomes too long, the helper text might go out of view. 

Active “Add” button (left) and disabled “Add” button (right)
Active “Add” button (left) and disabled “Add” button (right)

Mandatory Form Field

If there is a required field that is indicated by an asterisk (*), the attachment form cell is validated to ensure that the user has uploaded a file. Validation occurs when the user taps to save or apply changes. If no attachment is uploaded, the application should place the form cell into an error state, where the error message replaces the helper text. The error message should be concise and short, with one line of text only. 

The asterisk as an indicator is a de facto standard that is widely recognized and typically doesn’t require additional explanation in business contexts or when targeting experienced users, as it avoids cluttering the UI with unnecessary information. However, when targeting a broad audience or potentially inexperienced users, it’s advisable to add a note such as “Fields marked with an asterisk are required fields” either at the top or at the bottom of the page. We recommend placing it consistently throughout the application. For further details, refer to ACC-253 Details.

Attachment form cell as a mandatory field before validation (left) and after validation in error state (right)
Attachment form cell as a mandatory field before validation (left) and after validation in error state (right)

Deleting Attachments

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. To avoid accidental deletion of files, we recommend displaying an immediate confirmation dialog or snackbar after a user taps on the “Delete” button with an option to undo the action.

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

Should a user not have permissions to delete a file, the “Delete” icon can be disabled. In this case, we recommend letting users know why the delete functionality is not available.

Disabled “Delete” icon with hint text
Disabled “Delete” icon with hint text

Viewing Attachments

Users can view the file by tapping on the attachment cell, outside the “Delete” button. The preview of the file is not managed within the SAP Fiori app; instead, it is handled by the Android system. Apps that support the attached file type will launch to display the file. 

View Modes

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.
  • Use an asterisk (*) next to the list picker form cell label to indicate that the input is required.
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 consist of text, images, or icons. They can be configured in various ways to accommodate a wide range of use cases.

Object cell on compact (left) and expanded screen (right)
Object cell on compact (left) and expanded screen (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. Unread Indicator (Optional)

The unread indicator informs users about new or unseen object cells. It automatically disappears after the user views the content or interacts with it.

C. Left Icon Stack (Optional)

A set of up to two vertically stacked icons can be displayed on the far left. These icons provide information about the object, such as whether it is unread or if it has attachments. 

D. Image (Optional)

The 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 square frame.

E. Main Content

The main content is the main area for text content. It allows for a title, subtitle, caption, description, rating control, avatar row, status info label and tags. The title is the only mandatory content for the object cell.

F. Description (Optional)

A description can be used to provide additional information about the object. The description label offers two display options: it can be truncated after a customizable number of lines, with the default set to three, or it can be configured to display the full content. On compact and medium screens, it appears at the bottom of the main content. On expanded screens, the description is displayed in its own column.

G. Status Info (Optional)

The status info 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 the condition of the item, such as its priority or status.

H. Action Area (Optional)

The action area is used to add secondary actions in addition to the primary action of drilling down. These secondary actions can include information disclosure, download options, or an overflow menu.


Object cell anatomy
Object cell anatomy

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

Single Action

The single action object cell variation is used to display an object with a specific action, such as downloading a document or adding an item to a cart. An icon or button on the right is used to indicate the action. The button can also be set to act as a toggle, such as in “Follow/Unfollow”. 

An object cell with single action on the right
An object cell with single action 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

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

Overflow Menu

The overflow menu opens directly above or below the overflow menu icon button.   
The direction in which the overflow menu opens is determined by the native Android system. 

Interaction of selecting the overflow icon of an object cell and opening the action menu
Interaction of selecting the overflow icon of an object cell and opening the action menu

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 compact screen (top) and expanded screen (bottom)
Object cell on compact screen (top) and expanded screen (bottom)

Resources

Development: FioriObjectCell, ObjectCell, GridObjectCell, GridTableRow, ContactCell

SAP Fiori for iOS: Object Cell

Material Design: Lists

Related Components/Patterns: Status Info Label, Menu 

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 that the text input is required.
  • 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

Overview

SAP Fiori for Android leverages various window size classes to provide a pleasant user experience across different form factors. This adaptive design functionality allows content to be dynamically rearranged and resized in response to changes in device orientation or when the app is used on different . By shifting the focus from specific devices, such as phones and tablets, to window size classes, breakpoint-based layouts can be implemented to seamlessly adapt to various screen sizes and orientations.

The objective is to convert the content of static page types, such as object details and list reports, into adaptable panes, ensuring optimal composition for each window size class. This approach promotes thinking in “panes” rather than screens. Adaptive design facilitates the dynamic adaptation, rearrangement, and resizing of panes to ensure that the app’s content is displayed appropriately within the available space.

Benefits of Adaptive Layout

Adaptive design enables designers and developers to create versatile, user-friendly interfaces that seamlessly adapt to different screen sizes and devices. Optimizing large screen design for SAP’s business applications has a positive impact on the of mobile users. By utilizing larger screen space, numerous daily tasks can be performed more efficiently.

Streamlining Navigation and Control

Making menus and controls easily accessible next to the workspace and incorporating intuitive gesture-based navigation.

Improving Data Visualization and Analysis

Enhancing readability and interactivity of complex data sets, such as charts and spreadsheets, for quicker and more effective analysis.

Enhancing Data Entering and Form Filling

Providing extra space for on-screen keyboards and data entry fields to minimize scrolling, reduce errors, and expedite the process.

Facilitating Document Editing and Review

Simplifying editing with full-page views of texts, images, or presentations, facilitating side-by-side comparisons, and allowing for stylus support for precise input.

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. 

An asterisk (*) next to the chip form cell label can be added to indicate that the input is required.

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 provides a dialog for date or time-based selections. It can be used to select a date, a range of dates, a time, or a duration of time. 

Picker types in compact size from left to right: date picker, range picker, time picker, duration picker
Picker types in compact size from left to right: date picker, range picker, time picker, duration picker

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 selected date, helper text, and input icon button.

  • The selected date is formatted: abbreviated month and date number, followed by the year. 
  • The helper text is customizable and helps remind the user to select a date 
  • The input icon button allows users to switch to the input mode for the picker. See the Variations section for more information. 

B. Year and Month Selector 
Includes the year menu and month navigator.

  • The year menu displays a list of years in place of the date labels. This helps ease navigating to dates far in the past or future. See the Behavior and Interaction section for more information. 
  • The left and right arrows of the month navigator navigate the dates shown to the previous or next month. See the Behavior and Interaction section for more information. 

C. Weekday Label Container
Displays labels for the seven days of the week.

D. Date Label Container 
Displays the dates of a month in a grid view.

E. Footer
Includes the Cancel and OK label buttons.

  • The Cancel label button cancels any changes made to the selected date and closes the picker dialog. 
  • The OK label button saves any changes made to the selected date and closes the picker dialog.  
Anatomy of the date picker
Anatomy of the date picker

Range Picker

The range picker is a full-page dialog. 

A. Top App Bar

Includes the Close icon button and Save label button. 

  • The Close icon button cancels any changes made to the selected date range and closes the picker dialog. 
  • The Save label button saves any changes made to the selected date range and closes the picker dialog.  

B. Header

Includes the selected date range, helper text, and input icon button. 

  • The selected date range is formatted: abbreviated month and date number for the start date to abbreviated month and date number for the end date. 
  • The helper text is customizable and helps remind the user what date range is being selected.  
  • The input icon button allows users to switch to the input mode for the picker. See the Variations section for more information. 

C. Weekday Label Container
Displays labels for the seven days of the week.

D. Date Label Container
Displays the dates of the visible months in a grid view.

Anatomy of the range picker
Anatomy of the range picker

Time Picker

A. Header

Includes the selected time, helper text, and AM/PM selector. 

  • The selected time is in a digital format (hh:mm). The hour and minute value containers can be selected to change what is shown in the clock. See the Behavior and Interaction section for more details.  
  • The helper text is customizable and helps remind the user what time is being selected.
  • The AM/PM selector allows the user to choose between AM or PM time. 

B. Clock
Displays an analog clock that includes a clock hand that can be rotated to select an hour or minute. See the Behavior and Interaction section for more information.

C. Footer 

Includes the input icon button and Cancel and OK label buttons. 

  • The input icon button allows users to switch to the input mode for the picker. See the Variations section for more information.
  •  The Cancel label button cancels any changes made to the selected time and closes the picker dialog.
  • The OK label button saves any changes made to the selected time and closes the picker dialog. 
Anatomy of the time picker
Anatomy of the time picker

Duration Picker

A. Header
Includes a customizable title to help remind the user what duration is being selected.

B. Previous Value Preview
Displays a preview of the previous value; the value that comes before the currently selected value.

C. Selected Value
Displays the currently selected value. 

D. Next Value Preview
Displays a preview of the next value; the value that comes after the currently selected value.

E. Footer

Includes the Cancel and OK label buttons. 

  • The Cancel label button cancels any changes made to the selected duration and closes the picker dialog. 
  • The OK label button saves any changes made to the selected duration and closes the picker dialog. 
Anatomy of the duration picker
Anatomy of the duration picker

Behavior and Interaction

Date Picker

Selection

To select a date, users may tap on a date label. Today’s date is selected by default.

Selecting a date in the date picker
Selecting a date in the date picker

Navigation

To navigate between years, users may tap the year and month menu label and select a year. The picker navigates to the newly selected year with the already currently selected month.

To navigate between months, users may tap the left and right month selector icons or swipe the date label container area left and right.

The picker may also be navigated using an external keyboard and mouse for accessibility.

Navigating years in the date picker
Navigating years in the date picker
Navigating months in the date picker
Navigating months in the date picker

Range Picker

Selection

To select a date range, users must tap on a starting date label followed by an end date label. The default selected range is today to today.

If a start date is already selected and the user selects a day before the selected start date, the newly selected date becomes the start date.

If a start and end date are already selected and the user selects a date, the newly selected date becomes the start date and the end date is cleared.

Selecting a range in the range picker
Selecting a range in the range picker

Navigation

To navigate between months, users may swipe up and down on the date label container area. The date labels scroll infinitely unless a minimum and/or maximum date has been defined. See the Variations section for more information.

The picker may also be navigated using an external keyboard and mouse for accessibility.

Navigating through months in the range picker
Navigating through months in the range picker

Time Picker

Selection

To select which value to update, users may tap on the hour or minute value containers. This changes the numbers displayed on the clock to hours or minutes.

To select an hour or minute value, the user may rotate the clock hand around the analog clock. This updates the selected hour or minute in the digital hour and time value containers. The default selected time is the current time.

The hour and minute values may be updated using the keyboard. The user may also navigate between them using the keyboard for accessibility.

Selecting a time in the time picker
Selecting a time in the time picker

AM/PM

To select whether the time is AM or PM, the user may tap on AM or PM in the AM/PM selector.

The user may also navigate between them using the keyboard for accessibility.

Switching from AM to PM in the time picker
Switching from AM to PM in the time picker

Duration Picker

Selection

To select a time, users may scroll through a list of values. The value in the center is the selected value.

Selecting a duration in the duration picker
Selecting a duration in the duration picker

Variations

Input Mode

The date, range, and time pickers all include an input selection mode. This mode can be shown as the default dialog when the picker is triggered. They provide input dates for value selection for accessibility.

It is recommended to show the input selection mode for devices with small heights as the input-mode dialogs are smaller than the selection-mode dialogs.

The input mode for the dialogs from left to right: date picker, range picker, time picker
The input mode for the dialogs from left to right: date picker, range picker, time picker

Date Picker States

  1. Default – days of the month being displayed
  2. Today – the current system date
  3. Selected – The selected date
  4. Range start – the selected starting date when an end date is selected
  5. Range middle – dates between the selected starting and end dates
  6. Range end – the selected end date
  7. Disabled – dates that cannot be selected.
    • Singular dates can be disabled the selected range may not include these dates in the middle.
    • A minimum and/or maximum date can be defined. Dates before the minimum and/or after the maximum date will be in a disabled state.
Range picker states from left to right: default, today, selected, range start, range middle, range end, disabled
Range picker states from left to right: default, today, selected, range start, range middle, range end, disabled

Status Indicators

Date labels may also display additional information via a status indicator. The color and shape of the status indicator is customizable. The default is a circular dot in the blue call-to-action color.

A date picker with the 11th, 12th, and 13th decorated with the default status indicator
A date picker with the 11th, 12th, and 13th decorated with the default status indicator

Adaptive Design

The date, range, and time pickers adapt to different window sizes.

  • For compact windows, the portrait mode of the pickers is shown.
  • For medium and expanded windows, the landscape mode of the pickers is shown.

The input mode for the date, range, and time pickers may be shown as default or for medium and expanded window classes if desired.

The landscape mode for the dialogs from left to right: date picker, range picker, time picker
The landscape mode for the dialogs from left to right: date picker, range picker, time picker

Resources

Development: DateTimePickerFormCell, DurationPickerFormCell

SAP Fiori for iOS: Pickers

Material Design: Date Pickers, Time Pickers

Related Components/Patterns: Date & Time Picker Form Cell, Dialogs

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

Button Types

Simple Button

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 Button

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 Button

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 Button

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


Loading State Button

The loading state can be applied to a button when a user-triggered non-disruptive progress is being processed. The original icon and/or text is replaced with an activity indicator and/or loading message. The color and style of a loading state button follows that of a tap state button. A label is optional for loading state buttons, especially for buttons in a container with limited space. 

From top to bottom: contained loading state button, tonal loading state button, text and icon loading state button
From top to bottom: contained loading state button, tonal loading state button, text and icon loading state button

Size Variants

Auto-Width Loading Button: When there is only one button in a container, the button width may change according to the text length to show the full loading message. 

Auto-width loading button
Auto-width loading button

Fixed-Width Loading Button: When there is one or multiple buttons in a container, the button width may stay fixed to the default state width. It can hide the text-loading message and only show the activity indicator when there is not enough space. Changing other buttons to disabled state during the progress is recommended. 

Fixed-width loading button
Fixed-width loading button

Full-Width Loading Button: When there is one or multiple buttons in a container, the button width may change to the full width of the container to show the full loading message. Other buttons the user didn’t act on will be hidden until the loading process is finished. 

Full-width loading button
Full-width loading button

States

  • Processing State: In the processing state, the activity indicator replaces the original icon and/or label and keeps rotating until the process is complete. Apply the animation when the processing time is longer than 1s. 
  • Success State: When the processing succeeds, the indicator can be replaced with a success icon, and the text is replaced with a success message. The button can be disabled if necessary. 
  • Fail State: if the loading fails, the button will go back to the original button. 
Success state loading button
Success state loading button
Fail state loading button
Fail state loading button

Button Sizes

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