Multi-Message Handling

Multi-message handling helps users manage multiple messages within an app, making it easy for users to take action.  

Multi-message handling on compact screen (left) and expanded screen (right)
Multi-message handling on compact screen (left) and expanded screen (right)

Anatomy

Multi-message handling follows the basic structure of a bottom sheet, prioritizing message components based on their importance. Error messages should appear first to capture the user’s attention.

A. Banner

The banner contains:

  • Optional icon or image
  • Message summary
  • Button

B. Bottom Sheet

The bottom sheet displays message details.

C. Section Header (Optional)

The section header includes a title and action button for additional functions.

D. Filter Feedback Bar (Optional)

The filter feedback bar allows users to quickly filter messages.

E. Message Item

The message item includes an icon or image, message content, and an optional action button to support user interactions.

Multi-message handling anatomy
Multi-message handling anatomy

Behavior and Interaction

Trigger

The banner notifies the user of messages. Tapping the banner opens the multimessage handling bottom sheet for detailed viewing and interaction. 

Triggering multi-message handling from the banner
Triggering multi-message handling from the banner

Tap to Scroll

When the bottom sheet is open, tapping a message item automatically scrolls to the related field or section with the error, allowing users to address the issue. 

Tapping to auto-scroll allowing users to address the error
Tapping to auto-scroll allowing users to address the error

Clear

Tapping the “Clear All” button removes all messages displayed in the bottom sheet. 

Tapping the “Clear” button in a section header removes only the messages within that specific section. 

“Clear” button in a section header that removes the messages specific to that section
“Clear” button in a section header that removes the messages specific to that section

Resources

SAP Fiori for iOS: Error Handling 

Related Components/Patterns: Banner, Bottom Sheet, Header, Filter Feedback Bar, Object Cell 

Avatars

An avatar is a visual element used to display user profiles, initials, placeholders, icons, or business-related images, such as logos and product pictures.

Avatar and avatar group variations on compact (left) and expanded screens (right)
Avatar and avatar group variations on compact (left) and expanded screens (right)

Usage

Do

Consider using round avatars to represent user profiles and square avatars for objects.

Don't
  • Don’t use avatars as interactive icons. Instead, use an icon button.
  • Don’t display more than one letter in an initial.

Anatomy

A. Avatar

The avatar is a round or square container that contains an image, an icon, or an initial. One alphabetical character is supported for an initial.

B. Badge (Optional)

An optional badge can be placed in the bottom right corner on top of the avatar to display a status.

C. Avatar Group

Multiple avatars can be grouped horizontally in an avatar group. To avoid clutter, we recommend displaying no more than six avatars. The last avatar can indicate the number of additional avatars when there are too many avatars to display.

The avatar group supports round avatars with a size of 16dp (default) or 24dp.

D. Label (Optional)

A short label can be displayed together with the avatar group to provide descriptive information.

Anatomy of an avatar (top) and avatar group (bottom)
Anatomy of an avatar (top) and avatar group (bottom)

Behavior and Interaction

Since an avatar is typically part of a specific component, such as an object cell, card, or object header, it is not interactive and serves a decorative or informational purpose.

Wrapping Behavior

The avatar group label should be short and concise. In cases where the label is longer than the allocated space, it wraps to a new line by default. As a nested component, the wrapping behavior can be overridden by the parent component. If the label gets truncated, the user should still be able to view the full label, for example, by navigating to a detail page or by displaying a tooltip on long press.

Variations

Size

The size of an avatar is customizable, preferably in increments of 8dp. The avatar group can display avatars with a size of 16dp or 24dp.

Shape

Depending on the context, the avatar can be round or square with rounded corners.

Color

By default, the avatar uses the SAP Fiori accent color palette. If required, the color theme can be customized or branded colors can be introduced.

Layout

Depending on the use case, one label can be placed before, after, below, or above the avatar group.

Label variations from top to bottom: trailing label, leading label, label above, and label below avatar group
Label variations from top to bottom: trailing label, leading label, label above, and label below avatar group

Resources

Development: Avatar, Avatar Stack

SAP Fiori for iOS: Avatars and Images 

SAP Fiori for Web: Avatar

FAB

The floating action button or FAB is a button variant that displays the most prominent action on screen. It is typically placed on the bottom corner of the screen, but it can also be placed in the center and remains persistent as users scroll through content.

FAB in compact (left) and expanded (right) size classes
FAB in compact (left) and expanded (right) size classes

Usage

Do
  • Use FAB for the most important action on screen. 
  • Place it on an easily accessible part of the screen. 
  • Ensure that FAB action is clear and concise. 
Don't
  • Don’t use multiple FABs to display competing actions on screen. 
  • Don’t place FABs in hard-to-reach places on screen. 
  • Don’t use FAB for obscure or unclear actions. 

Anatomy


FAB & Extended FAB 

A. Icon

The icon is a visual glyph that is the main form of communicating the FAB’s action. 

B. Container

The container is a rectangular shape that encloses the icon and optional label.

C. Label (Optional)

The label is used to supplement the icon in instances where additional context is needed in communicating the meaning of the FAB. The label is only used for the extended FAB variant. 

 

Anatomy of FAB
Anatomy of FAB


Behavior and Interaction


Tapping Interactions 

Transform

When tapped, the FAB transforms into the intended action to draw a direct connection from the FAB to the container. A new screen is opened. 

FAB transforms into a menu
FAB transforms into a menu


Nested Actions 

If supporting actions are needed, multiple small FABs can appear when the user taps on the FAB. To hide the supporting actions, the user taps on the parent FAB. 

Small FABs appear when FAB is pressed
Small FABs appear when FAB is pressed


Scrolling Behaviors

Fixed Behavior 

When scrolling, the most common FAB behavior is to remain fixed at the bottom of the screen. This provides a persistent accessible entry point for the user to perform an action.

FAB remains fixed when scrolling
FAB remains fixed when scrolling


Disappear & Reappear 

Additional behaviors include appear and disappear during a scroll state. For example, the FAB appears while scrolling and disappears after the user stops scrolling, allowing for more screen real estate. 

FAB disappears when scrolling up and reappears when scrolling down
FAB disappears when scrolling up and reappears when scrolling down


Collapse & Expand 

Extended FABs can collapse while scrolling and expand while the user stops scrolling.

Extended FAB collapses while scrolling
Extended FAB collapses while scrolling


Adaptive Design

Given the difference in size and screen orientation during usage, the placement of the FAB differs between compact and expanded screen sizes.


Compact & Expanded Screen Sizes

On compact screen sizes, FABs are placed on the lower right-hand side of the screen, while FABs on expanded screens are placed on the upper left-hand side. These screen-specific placements allow for optimal reachability to the user.



On compact screens, FAB is placed on the lower right part of the screen
On compact screens, FAB is placed on the lower right part of the screen
On expanded screens, FAB is placed on the upper left part of the screen
On expanded screens, FAB is placed on the upper left part of the screen

Variations


Size Variations 

The FAB has several size variants starting with the baseline FAB variant. The additional size variations provide more flexibility for app teams to fulfill their product needs.



A. Small FAB

The small FAB is used in instances where multiple supporting actions of equal importance are needed. It may also be used where screen real estate is limited.

B. FAB

FAB is the standard size variant for FABs. It satisfies most use cases, but you may opt for other options based on specific user needs.

C. Extended FAB

The extended FAB contains an icon and a text label. The extended FAB can collapse into an FAB in instances where the user scrolls. 

 D. Large FAB

If additional size requirements are needed, use a large FAB to provide a larger touch target. 

Small FAB (A), FAB (B), extended FAB (C), and large FAB (D)
Small FAB (A), FAB (B), extended FAB (C), and large FAB (D)


FAB Styles

The FAB has two style variants, primary and secondary styles. Use these styles based on the visual hierarchy according to their visual hierarchy.



A. Primary Style

The primary style is the most visually prominent style on screen. Use this style variant as the single action on screen.

B. Secondary Style

The secondary style is the subdued variant of the primary style. Use this style in stances where a prominent action is needed without the visual prominence of a primary button.

Primary style (A) and secondary style (B)
Primary style (A) and secondary style (B)


Resources

Development: Button

Material Design: FAB

Related Components/Patterns: Button, Navigation Rail

Illustrated Message

The illustrated message communicates empty, error, and success states through a combination of solution-oriented messages, engaging illustrations, and a conversational tone. The illustrated message turns a situation, even a negative one, into a better experience for your users, while ensuring consistency.

General empty, error and success states example
General empty, error and success states example

Usage

Use the illustrated message when you want to improve the user experience for one or more message states in your application. The illustrated message’s content should be concise but prioritize clear messaging.

Turn a negative event into a positive one

Take time to design and write a solution-oriented message. Be precise in your wording and use appropriate illustrations.

Ideally, a negative event in a software product doesn’t generate negative emotions. A well-designed illustrated message that leaves users feeling understood and valued can result in a neutral or even positive feeling. Remember that users will benefit from thoughtfully crafted illustrated messages every time they encounter them – perhaps even daily.

An illustrated message that has positive messaging and cohesive imagery
An illustrated message that has positive messaging and cohesive imagery
An illustrated message that has a problem-oriented message and displays an icon rather than an illustration
An illustrated message that has a problem-oriented message and displays an icon rather than an illustration

Always write a coherent, solution-oriented message

Make sure that the illustration, message, and call to action work together as one to clarify the situation. Always provide a message. Never use an illustration without a message. A message combined with an illustration is more powerful than a message alone.

An illustrated message that has solution-oriented messaging with a related illustration and call to action
An illustrated message that has solution-oriented messaging with a related illustration and call to action
An illustrated message without the message and an illustration unrelated to the call to action
An illustrated message without the message and an illustration unrelated to the call to action

Tailor your message to your use case

Always ensure that the default text fits in the context. If not, replace it or make it more precise.

Example:
Default text: No results found / Try changing your search criteria.
Adapted text (supplier table used with a filter bar): No suppliers found / Try adjusting your filter settings.

 

We recommend replacing generic terms such as “data” and “object” with your specific business object.

Example:
Default text: There’s no data yet / When there is, you’ll see it here.
Adapted text: There are no orders yet / When there are, you’ll see them here.

An illustrated message that has enhanced the message to utilize use case-specific terms
An illustrated message that has enhanced the message to utilize use case-specific terms
An illustrated message displaying a general message without contextual information
An illustrated message displaying a general message without contextual information

Use the illustrated message to communicate high-priority information

Place the illustrated message in dialogs, cards, and at a page level rather than a snackbar or a banner to indicate high-priority empty, error, and success states.

An illustrated message placed in a full-screen page
An illustrated message placed in a full-screen page
An illustrated message placed in a banner (top) and snackbar (bottom)
An illustrated message placed in a banner (top) and snackbar (bottom)

Prioritize the message over the illustration

When the illustrated message is placed in a container that does not fit all the elements, we recommend removing the illustration so that the user can read the entire message.

An illustrated message that prioritizes the content over the illustration so the most important information can fit in the container
An illustrated message that prioritizes the content over the illustration so the most important information can fit in the container
An illustrated message including all elements that do not fit within the container’s available space
An illustrated message including all elements that do not fit within the container’s available space

Anatomy

A. Illustration (Optional)

Use the illustration to help clarify the situation and add personality. The illustration should be appropriate for the use case and the container being used, such as a dialog or card, and that similar use cases are handled consistently.

This section can display an illustration from an app-specific library, or one provided by the core design team’s illustration library.

B. Title

The title explains the reason for the specific state, preferably in a single line. Use the title to convey the essence of your message in simple language. We recommend writing the title in sentence case.

If you are using one of the standard use cases, you can refine the default text and customize it to the precise use case.

C. Description (Optional)

Use the description to add details and prompt the user what to do next, preferably in two sentences or less. Like the title, the description’s default text can also be customized to fit a specific use case.

D. Call to Action (Optional)

If there are clear next steps for the user to take, there are a maximum of two call to action buttons that can be used.

Illustrated message anatomy
Illustrated message anatomy

Adaptive Design

Illustration Sizes

We recommended using the following fixed mobile illustration sizes for the following containers:

 

A. Size XL (320×240)

Full-screen page, full-screen dialog

B. Size L (160×160)

Page section, larger dialogs, large cards (2×3, 2×2)

C. Size M (92×92)

Page section, smaller dialogs, medium card (2×1)

D. Size S (64×64)

Smaller dialogs, small card (1×1)

E. Size XS (48×48)

Smaller dialogs, small card (1×1)

Illustration set with all five illustration sizes
Illustration set with all five illustration sizes

Message Width Adaptiveness

Depending on the container in which the illustrated message is placed, the message content can stretch to fill the maximum width of the container. Alternatively, the message container can be set to a fixed width to maintain cohesiveness between a set of illustrated messages.

An illustrated message description with a fixed width (left) and a description that stretches to fill the available space (right)
An illustrated message description with a fixed width (left) and a description that stretches to fill the available space (right)

Call-to-Action Adaptiveness

The call-to-action buttons can fill the whole container or can be aligned left, right, center, or fill the available container space. When using two actions in the illustrated message, the buttons can be stacked in a vertical layout or be placed next to each other in a horizontal layout. If the buttons in a horizontal layout exceed the container’s maximum width, the container will responsively take on a vertical layout to provide ample space for the actions.

Illustrated message example that shows buttons in a horizontal call to action layout (left) exceeding the container width and adapting to a vertical call to action layout (right).
Illustrated message example that shows buttons in a horizontal call to action layout (left) exceeding the container width and adapting to a vertical call to action layout (right).

Variations

Empty State

An empty state is a moment in the user experience when there is no content to display. Some common use cases include:

  • Empty list, table, or inbox
  • No notifications or planned activities
  • Before search
“No task” empty state example
“No task” empty state example

Error State

An error state is caused by missing permissions, incorrect configuration, or a system issue. Some common use cases include:

  • Unable to load, upload, or connect
  • No search results found
“Unable to load” error state example
“Unable to load” error state example

Success State

A success state is when an action has been performed without errors or warnings, meaning that the user has achieved a certain task or milestone. Some common use cases include:

  • Reaching a daily goal or target
  • Completing a work task
“Task complete” success state example
“Task complete” success state example

Custom States

The illustrated message component was designed to be flexible enough to handle custom use cases. Along with altering the actual text content (title, description, or call-to-action label), you can also use your own custom illustrations if they conform to the preset dimensions of the different available illustration/image sizes mentioned in the above adaptive design section.

An illustrated message with custom text content and illustration that aligns with the set mobile illustration sizes
An illustrated message with custom text content and illustration that aligns with the set mobile illustration sizes

Message Text Variations

The illustrated message title has a default font size of (Subtitle 2) and a larger title variation of 20pt font size (Header 6) to emphasize the state’s main headline. While choosing the large title variation is optional, we recommend using it in scenarios where the illustrated message is placed in a larger container with ample space. When the illustrated message is placed in a full-page section, large dialog, or large card, it could be beneficial to use the large title variation to make the headline more noticeable to the user. The illustrated message title and description text can align left, center, or right, depending on the use case.

Example of illustrated messages with the large title variation
Example of illustrated messages with the large title variation

Call-to-Action Variations

The call-to-action buttons can take on a variety of styles depending on the use case. While the button style is flexible, we recommend maintaining consistent button styling across the application.

Example of illustrated messages with mixed button styling and call to action layout
Example of illustrated messages with mixed button styling and call to action layout

Resources

Development: Illustrated Message

SAP Fiori for iOS: Empty State View

SAP Fiori for Web: Illustrated Message

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

Card Header

The card header is the uppermost part of the card that provides important information about the card and its related content on the detail page. The optional card header allows for a quick overview of key information, such as the title, subtitle, and status of the card.

Card header examples
Card header examples

Usage

When using the card header, only include essential information about the card‘s content. The card system offers various components for this purpose. Consider the following aspects when using the card header: 

Do
  • In the main header, only include a title, subtitle, left accessory, icon button, and/or a counter. 
  • In the extended header, only include status info label, rating controls, tags, text, and/or a KPI. 
  • For the main header, use a maximum of three rows. 
  • For the extended header, use a maximum of three rows. 
  • Use only an icon button within the card header that directly impacts the card, for example, to favorite or bookmark the card). 
  • Make sure that the title on the header image has a good contrast to the image. For example, use a white title on a darker image and a black title on a lighter image. 
  • Maintain consistent positioning of the components in the card header throughout the app. For example, if one card header contains tags in the first line, all the other cards in your app should have them too. 
  • Use the counter only if the card body includes list components such as card cells or data table. 
Don't
  • Don’t overcrowd the card header with too many elements.  
  • Don’t place other components, such as a key value cell or an avatar row component, in the card header. Use the card body instead. 
  • Don’t use the card header to provide more detailed information on the card, use the card body instead.
  • Don’t add more than three rows to the main header. 
  • Don’t add more than three rows to the extended header. 
Cards with good title contrast on image
Cards with good title contrast on image
Cards with bad title contrast on image
Cards with bad title contrast on image
Card with well-balanced content OR: card with recommended number of elements in card header
Card with well-balanced content OR: card with recommended number of elements in card header
Card with too many elements in the card header
Card with too many elements in the card header

Anatomy

A. Header Container

The header container is the element that holds the header image, main header, and extended header of the card. 

B. Header Image (Media)

The header image, also known as “media” in the SDK, is an optional decorative element that allows you to include an image that matches the card context. 

C. Main Header

The main header contains essential information about the card, such as a title, subtitle, left accessory, icon button, and/or a counter. However, these elements, including the main header itself, are optional components. 

D. Extended Header

The extended header contains additional elements that provide more information. These elements can be a status info label, rating controls, tags, text, and/or a numeric value in the form of a KPI. Only one component can be placed in one row. The content of a row is limited to one line by default, but it can be configured to wrap. 

Card header anatomy
Card header anatomy

Variations

Main Header Components

All components in the main header are optional, including the title. If there is already a title in the header image, it is not recommended to duplicate it or use it for other information in the main header. 

A. Title

B. Subtitle

C. Left accessory

D. Icon button

E. Counter

Information
Counter: The counter refers to the displayed list items in a card and the total number of list items in a list report. The SDK should offer a string, but you need to implement the counter’s logic depending on which dataset the counter refers to. 
Main header components
Main header components

Extended Header Components

Every element in the extended header is optional. To maintain consistency, it’s advisable to arrange the components in the same order across different rows. For instance, if your card includes a status in the first row, it’s recommended to place the status in the same position for other cards throughout your app.

A. Status info label

B. Text

C. Rating control

D. Tags

E. KPIs

Extended header components
Extended header components

Behavior and Interaction

Opening a Menu

Users can open a menu with host actions that directly impact the card, such as hiding the card. To close the menu, users can tap anywhere on the card or tap the icon button again. A common example is the overflow button or a filter option for cards.

Overflow menu interaction
Overflow menu interaction

Action Button 

If a card only requires one specific action instead of multiple actions, you can choose to directly place the corresponding icon button on the card. This eliminates the need for the overflow menu. 

Bookmark interaction
Bookmark interaction

Resources

Development: Card System

SAP Fiori for iOS: Card Header 

Related Components/Patterns: Cards Overview, Card Body, Card Footer

Card Footer

The card footer is the bottom part of a card that contains important or routine actions that directly impact the card, such as Approve or Submit. The footer can accommodate a maximum of two action buttons. 

Card with a highlighted card footer
Card with a highlighted card footer

Usage

When using the card footer to integrate important user actions related to the content or functionality of the card, consider the following aspects: 

Do
  • Include only one or two of the most important and routine actions in the card footer. 
  • If two buttons are used, always place the primary action on the right side of the footer. 
  • If two buttons are used, place the less important and secondary action on the left side of the footer. 
  • Ensure that the button’s wording reflects the action that will be performed after tapping on the button. 
  • Use short and concise button labels. 
Don't
  • Don’t include more than two buttons in the card footer.  
  • Don’t place an overflow button in the card footer. Having overflow buttons in both the footer and header might lead to visual ambiguity, as they would look identical. 
  • Don’t use long button labels. If the button label needs to be very long, use icon buttons or only one button. 
Card footer with a maximum of two buttons
Card footer with a maximum of two buttons
Footer with an overflow button
Footer with an overflow button

Anatomy

A. Card Footer Container

The card footer container holds one button that is right-aligned by default or set to full width, or two buttons that are right-aligned within the card footer container.

B. Primary Action Button

The contained action button is used to highlight the most important action. Only use one primary action in a card. We recommend using the contained button style for actions that trigger or complete a task. 

C. Secondary Action Button

The tonal action button is used for actions that are not the primary action. If the card doesn’t have a clear primary action or if the displayed actions are equally relevant, the card footer can include only tonal or text buttons. If the action is destructive, use the tonal negative style to warn users about taking extra precautions before performing an action. 

Card footer anatomy with one contained button (top left), one tonal button full width (top right), one contained and one tonal button (bottom left), and one tonal negative button and one contained button (bottom right)
Card footer anatomy with one contained button (top left), one tonal button full width (top right), one contained and one tonal button (bottom left), and one tonal negative button and one contained button (bottom right)
Information
Filled Buttons: We recommend using filled buttons, such as contained or tonal buttons, for the main actions in a card. Filled buttons have a container with a solid fill. The filled style is visually more prominent than text buttons, which helps users identify the action they want to perform. 

Behavior and Interaction

Tapping on the button in the card footer performs the indicated action. 

User-Triggered Feedback Indicator

A user-triggered feedback indicator (progress indicator) refers to a visual element or cue on the card that provides feedback to the user as they perform the action. This indicator is triggered by the user’s actions and is designed to provide a response or confirmation. The overlay informs the user of the affected area that the content is not actionable during the process. Users can still navigate and take actions on other items that are not affected.

Depending on the use case, consider using a short, clear message (see snackbar) about the processes that have been performed to ensure that the user is informed.

Overlay progress indicator on a card
Overlay progress indicator on a card

Resources

Development: Card System

SAP Fiori for iOS: Card Footer

Related Components/Patterns: Card Overview, Card Header, Card Body, Buttons 

Card Body

The card body is the central part of the card that is used to display additional information alongside the content shown in the card header. By using the card body, several components from the SAP BTP SDK for Android can be integrated into a card, enabling the recreation of card types such as object cards, list cards, and many more.

Card body examples
Card body examples

Usage

While the card body is optional, it can be used for different use cases. To improve user comprehension, we recommend including additional details. Avoid using the card body for complex tasks; instead, provide additional functionality and detailed information on a subsequent details page that users can access by pressing the card.

To maintain compact card sizes, be mindful of not overcrowding the card body with too many components. Additionally, consider the following aspects when adding components to the body:

Do
  • Limit the number of components in the card body.
  • Use components that are relevant to the context of the card.
  • Only use components that are listed below in the Variations section or variants of components that have been adapted for cards.
  • Make sure that the placement of the components within the card body is consistent throughout your app. For example, a KPI is placed in the body and centered aligned, other cards in your app should follow the same pattern.
Don't
  • Don’t include any components in the card body that are not listed below.
  • Don’t overcrowd the card body with too many elements.
  • Don’t add additional components such as a status or tags to the card body. Use the card header for that.
Cards with different components
Cards with different components
Don’t put too many components into the card body
Don’t put too many components into the card body

Anatomy

The card body is a single container that can hold various components. The container is flexible in height to accommodate a reasonable number of UI components until the maximum height of the entire card is reached.

Variations

In addition to the SAP Fiori for Android components that can be added to the card body, the card system also offers variants. These variants are specifically tailored to seamlessly fit within a card. The reduced horizontal and vertical spacing of the variants compared to the default components, ensuring a concise card design.

You can include the following components in the card body: 

Existing Components

Selection of existing card body components
Selection of existing card body components

Variants for Cards

Selection of card body components
Selection of card body components

A. Card Cell

The card cell component is a simplified version of the object cell, featuring a thumbnail, title, subtitle, footnote, and right accessories. There are a few variations for the right accessories such as a small KPI, status info label, two icon buttons, or a single button.

Card cell component
Card cell component

B. Divider/Spacing 

The divider can be placed between elements to better separate them visually or by hiding the divider a white space can be applied. 

Divider and white space component
Divider and white space component

C. Text

The text component can be used to add a short description on the card. The description should provide additional information related to the content. Keep the description short and precise to prevent it from wrapping into multiple lines.

D. Custom Composable

The custom composable allows custom components to be integrated into the body container. It provides flexibility in cases where the existing components included in the body do not support the use case. For example, a diagram or “live” map can be integrated.

E. Image

You can use an image in the card body to highlight information, such as an address of a hotel.

F. Data Table

The data table provides a title for each of the two available columns. You can have up to three entries. To accommodate various use cases, you can configure entries to adjust the text color, icon, and placement of an icon. You can choose to display a divider below the table, along with a text indicating that there are more items in the data set.

Data table component
Data table component

Behavior and Interaction

The default component used in the card determines the general interaction and navigation behavior. For example, if a key value cell is placed in the body, it inherits the interaction behavior and can either be displayed only or made clickable to trigger a call or other actions.

Card cell with icon buttons
Card cell with icon buttons

States

Use a suitable illustrated message to communicate different states.

For example, when there is no relevant content or data to be displayed in the body, include an empty state indicator. This indicator serves as an informational message for users, notifying them that there is currently no information or data available, or that new data or information needs to be generated.

Card body with an empty list
Card body with an empty list

Resources

Development: Card System, Card Cell

SAP Fiori for iOS: Card Body

SAP Fiori for Web: Card Content

Related Components/Patterns: Cards Overview, Card Header, Card Footer

Rating Control

The rating control can be used in various contexts to provide insight regarding the opinions and preferences of an object.

Rating control on mobile (left) and tablet (right)
Rating control on mobile (left) and tablet (right)

Anatomy

A. Icon

The icons represent the average object rating value through several states: on, off, and half. The states of these icons depict a rating from a scale of one to five.

B. Counter/Label

The counter or label supplements the rating. It can be used to display the number of ratings, the exact rating value, and more.

Anatomy of rating control and icon states
Anatomy of rating control and icon states

Behavior and Interaction

The rating control is currently display-only.

Variations

Size

Small vs. Large

The rating control can be displayed in a small or large format depending on the fit to context.

Counter/Label

Without vs. With

The counter or label for the rating can be hidden as needed.

Color

Default vs. Accent

The accent color for the icons can provide a unique variation when needed.

Rating control size (top), counter/label (middle), and color (bottom)
Rating control size (top), counter/label (middle), and color (bottom)

Resources

Development: Rating Control, FioriRating

SAP Fiori for iOS: Rating Control

SAP Fiori for Web: Rating Indicator

Staggered Layout

The staggered layout for cards is a design pattern where cards are arranged in a flexible, grid-like structure, with each card adapting to the available space while maintaining alignment with adjacent cards. It optimizes space usage and provides an aesthetically pleasing visual layout.

Cards displayed in a list (left) and staggered layout (right)
Cards displayed in a list (left) and staggered layout (right)

Usage

Do
  • Ensure that cards in the staggered layout contain related content.
  • If your app includes multiple card layouts, such as a carousel, add an optional title to your staggered layout container.
Don't

Don’t use a staggered layout for your tablet app when you have only a few cards.

Anatomy

Container with Cards

The cards have a consistent width, which is based on the number of columns determined by the window size class. The height of each card can vary depending on the content, resulting in an asymmetric view.

Margins

Margins are the spacings between the content and the outer edges of the window area. Margin widths are defined using fixed values for each window size class and change at different breakpoints to better fit the screen size.

Staggered layout with different card heights
Staggered layout with different card heights

Behavior and Interaction

Scrolling

Cards scroll vertically in a list and staggered layout.

Vertical scrolling in a staggered layout
Vertical scrolling in a staggered layout

Empty States

If there is no card in the list, it is important to use an empty state indicator in the layout container to communicate this information. This indicator serves as an informative message for users to let them know that no information or data is currently available or that some information needs to be created.

Illustrated message to indicate an empty state
Illustrated message to indicate an empty state

Adaptive Design

The number of columns may increase based on the screen width, allowing more cards to be shown side by side, resulting in a grid-like look that enhances readability.

For compact window size classes, cards are arranged in a vertical list, which span across the entire width of the screen and provide a high density of information.

For medium and extended window size classes, the layout changes to a staggered layout, with cards placed at the top and then left-most position. This ensures a seamless layout without gaps.

Staggered layout showing top-most and left-most card placement
Staggered layout showing top-most and left-most card placement

If there is a navigation rail or navigation drawer, the number of columns is reduced and adapts to the remaining screen width.

Staggered layout with cards and with navigation rail (right)
Staggered layout with cards and with navigation rail (right)

Additionally, you can also combine layouts. However, if a staggered and a carousel layout are used on the same page, it creates visual imbalance of the card spacing caused by the outer margins of the different layouts.

Resources

Development: Card System

SAP Fiori for iOS: Masonry Layout

SAP Fiori for Web: Overview Page

Related Components/Patterns: Cards Overview, Carousel Layout

Carousel Layout

A carousel layout is a design pattern that displays multiple cards horizontally, one after the other, with a glimpse of the next card visible on the edge of the screen. This partial visibility encourages users to swipe or scroll left or right to reveal more cards.

Carousel with cards compact window size class (left) and expanded size class (right)
Carousel with cards compact window size class (left) and expanded size class (right)

Usage

Use a carousel to maximize the amount of information displayed and preserve the context without making the user scroll further down the page. The cards in the carousel should be closely related to each other, allowing users to anticipate the kind of content they will discover when interacting with the carousel.

For compact window size classes, we recommend displaying a maximum of five cards, as users are unlikely to engage with more than that. For medium and extended window size classes, more cards can be added, and their width is automatically adjusted. When using a carousel, consider the following aspects:

Do
  • For compact window size classes, we recommend displaying a maximum of five cards.
  • For medium and extended window size classes, you can show up to eight cards.
  • Ensure that the cards have related content.
  • Keep the height of the cards compact to avoid additional vertical scrolling.
  • Make sure the carousel container is fully visible on the screen.
Don't

Don’t use a carousel if there are multiple types of cards. Use a staggered layout instead or add a section header with action to a deeper navigation to show all elements.

Anatomy

A. Container with Cards

The height of the carousel container is determined by the card with the most content that is currently visible to the user. All cards have the same height and cards with less content are stretched to match the height of the tallest card and align with the carousel container. This can lead to white space between the body and the footer, which is why the content of a card should always be compact and concise. The footer of the card is always aligned to the bottom edge. For more information, refer to cards overview.

Carousel with different card content
Carousel with different card content

B. Margin

Margins are the spaces between the content and the left and right edge of a window area. Margin widths are defined using fixed values for each window size class and change at different breakpoints to better fit the screen size. In a carousel, the margins on the left and right are not equal to cut the card at the right side of the screen.

Carousel showing a glimpse of the next card
Carousel showing a glimpse of the next card

Behavior and Interaction

Scroll Snapping

Scroll snapping refers to the effect of cards always snapping into place at specific, predefined positions during scrolling, rather than scrolling freely.

This gives the user a sense of precision and makes scrolling more pleasant.

Horizontal scrolling in a carousel
Horizontal scrolling in a carousel

Navigation

If there are too many cards in a carousel, you can add a header with a “See All” interaction. Tapping on “See All” navigates the user to a page that displays all cards from the carousel group in a list or staggered layout, depending on the window size class.

Empty States

If there is no card, it is important to display an indicator for an empty state in the carousel. This indicator serves as an information message for users to let them know that no information or data is currently available or that some information needs to be created.

Illustrated message to indicate an empty state
Illustrated message to indicate an empty state

Adaptive Design

A carousel shows fewer cards for a compact size class, while a medium and expanded window size class shows more, as there is more space available on the page. The height of a carousel container should be fully visible on the screen, regardless of the screen size.

If there is a navigation rail or navigation drawer, the number of columns is reduced and adapts to the remaining screen width.

Carousel with cards expanded size class with navigation drawer (right)
Carousel with cards expanded size class with navigation drawer (right)

You can also combine layouts. However, if a carousel and a staggered layout are used on the same page, it creates a visual imbalance of the card spacing caused by the outer margins of the different layouts.

Resources

Development: Card System

SAP Fiori for iOS: Carousel Layout

SAP Fiori for Web: Carousel (SAPUI5), Carousel (Web Component)

Related Components/Patterns: Layouts Overview, Staggered Layout, Cards Overview

Cards Overview

A card provides brief, related pieces of information and serves as an entry point, teaser, or preview to more detailed content. By pressing on the card, users can select the card and navigate to a dedicated page with more detailed information.

SAP Fiori for Android Cards
SAP Fiori for Android Cards

Usage

The card system for SAP Fiori for Android provides an advanced approach to utilizing cards, which offer a convenient way for your app to display content from various sources. It consists of a toolkit of nested components that enable the creation of diverse cards to meet the requirements of SAP products. These nested components encompass a wide range of functionalities, such as data table, key value cell, KPIs, and more. Additionally, the card system provides enhanced customization and flexibility, along with adaptable sizing options to accommodate different form factors and layouts, such as list, staggered, or carousel layout for cards. When incorporating cards into your app, it is crucial to keep the following aspects in mind:

Do
  • A card should focus on a single topic and be coherent in itself.
  • A card should serve as an entry point, teaser, or preview to more detailed content.
  • A card should be a short representation of a conceptual unit.
  • A card should present information in a compact and easily scannable format.
  • Incorporate cards into your app design to provide users with a quick overview of various information.
  • Ensure that there is a clear indication on the card when a user selects it and an external app is launched, for example, by incorporating an icon that indicates an external app is launched.
Don't
  • When designing your layout, don’t group components in a container with round corners. This style does not automatically transform a component into a card.
  • Don’t place unrelated elements within a card.
  • Don’t overload the user by including an excessive number of UI elements within a card.
Cards should focus on one topic
Cards should focus on one topic
Don’t place elements within a card that do not relate to the same topic
Don’t place elements within a card that do not relate to the same topic
Cards should display information in a compact format
Cards should display information in a compact format
Don’t include too many UI elements within a card
Don’t include too many UI elements within a card

Anatomy

The content of a card is organized in so-called blocks. The height of a card is determined by its content. However, it’s crucial to keep in mind the maximum permitted height of 520dp.

A. Card Container

The card container is the element that holds the header, body, and footer of the card.

B. Header

The card header, the card’s uppermost part, contains essential information about the card and its associated detail page content. It provides a quick overview of fundamental details such as the title, subtitle, and status of the card. More information on the header can be found in the Card Header article.

C. Body

The card body is the central part of a card that is used to provide additional information alongside the content shown in the card header. This allows for the presentation of in-depth details, data, or graphics relevant to the card’s context. More information on the body can be found in the Card Body article.

D. Footer

The card footer, located at the bottom of the card, is used for important or routine actions that directly impact the card’s functionality, such as “Approve’ or “Submit” actions. More information on the footer can be found in the Card Footer article.

Schematic card anatomy (left) and anatomy of an example card (right)
Schematic card anatomy (left) and anatomy of an example card (right)

Behavior and Interaction

Interaction States

Selecting a Card

When a user presses a card, the ripple effect serves as a clear and immediate feedback to indicate their selection.

When the whole card is selected, the ripple appears as an indicator
When the whole card is selected, the ripple appears as an indicator

Selecting an Interactive Element

When a specific element within the card, such as a card cell, is designed to be interactive, it is visually indicated by a ripple effect.

When an interactive item is selected within the card
When an interactive item is selected within the card
When an interactive element is selected within the card
When an interactive element is selected within the card

Navigation

When a card is selected, it triggers navigation to a designated page that provides more details, such as a list report page or an object details page.

By selecting the card, the user is redirected to a list report with more details
By selecting the card, the user is redirected to a list report with more details

When users engage with an interactive element within the card, such as an object cell, it triggers navigation to a dedicated details page that corresponds to the specific subject of that element.

By selecting an element within the card, the user is redirected to an object details page with more details
By selecting an element within the card, the user is redirected to an object details page with more details

Empty States

When there is no relevant content or data to display, it is important to include an empty state indicator within a card. This indicator serves as an informative message for users, letting them know that there is no information or data available at the moment or that new data needs to be created or uploaded.

Empty state if the entire card content fails to load
Empty state if the entire card content fails to load

If a component within the card fails to load, an empty state indicator is displayed in the body container.

Empty state if only the card body fails to load
Empty state if only the card body fails to load

Skeleton Loading

Skeleton loading is a design technique where a simplified and placeholder version of content is displayed to users while the actual data is being fetched or loaded. It provides users with a visual cue that content is on its way and improves the perceived performance of the interface.
There are three sizes based on the card blocks. This approach allows you to select a card size that approximately reflects the loaded card size.

Skeleton loading on a small, medium, and large card
Skeleton loading on a small, medium, and large card

Adaptive Design

The card system ensures that cards adjust seamlessly to different screen sizes and orientations. For compact window size classes, cards are designed to be narrower to accommodate the limited screen width of phones, making efficient use of the available space in a portrait orientation.

For medium and expanded window size classes, cards can have a wider layout to take advantage of the increased screen real estate, resulting in a more spacious and visually appealing presentation of content. More information about adaptive design can be found in carousel layout and staggered layout.

Variations

The flexible card container allows a variety of cards to be created for any use case
The flexible card container allows a variety of cards to be created for any use case

Data Table Card

Create a data table card to display key data points about an object in a two-column format.

Data table card featuring the card header (with main header), card body (with data table) and card footer
Data table card featuring the card header (with main header), card body (with data table) and card footer

List Card

Create a list card to display a preview of a set of items or objects in a vertical list format.

List cards featuring the card header (with main header) and card body (with card cell and divider or white space components).
List cards featuring the card header (with main header) and card body (with card cell and divider or white space components).

Object Card

Create an object card to display a preview of an object.

Top object card featuring the card header (with header image, main header, extended header), and card footer. Bottom object card featuring the card header (with main header and extended header) and card body (with key value cell, divider/space and KPI).
Top object card featuring the card header (with header image, main header, extended header), and card footer. Bottom object card featuring the card header (with main header and extended header) and card body (with key value cell, divider/space and KPI).

Resources

Development: Card System

SAP Fiori for iOS: Cards Overview

SAP Fiori for Web: Cards (SAPUI5), Cards (Web Component)

Related Components/Patterns: Card Header, Card Body, Card Footer, Carousel Layout, Staggered Layout

Layouts Overview

Card layouts are structured containers that determine how cards are arranged and displayed in a user interface. These layouts control the placement, order, and visual presentation of cards, ensuring an aesthetically pleasing design. The layouts adjust to multiple devices, window size classes, and orientations, ensuring consistency across layouts.

Cards in a carousel (left) and staggered layout (right)
Cards in a carousel (left) and staggered layout (right)

Usage

A layout is used to group cards with similar content, ensuring a visually structured arrangement. The proper usage of a grid layout draws the user’s attention to the most important cards on a page, resulting in improved efficiency and higher quality.

Make sure that the layout is optimized for different window size classes to display the cards in the best way possible. Find more information in the staggered layout and carousel layout articles.

Anatomy

When designing card layouts for native apps, consider the following key factors that determine the horizontal width of the screen.

A. Columns

Content is organized into columns on the screen. This is where the cards are placed.
In responsive layouts, the column width is not defined by fixed values. This allows the content to adjust to any screen size. The number of columns displayed in the grid is determined by the breakpoints of window size classes, ranging from 4, 8, or 12 columns.

B. Gutters

A gutter is the space between columns that helps to visually separate content.
Gutter widths have predefined values at each breakpoint range. To enhance the content’s adaptability to a given screen size, gutter widths can change at different breakpoints.

C. Margins

Margins are the spaces between the content and the left and right edge of a window area. Margin widths are defined by specific values for each window size class and change at different breakpoints to better fit the screen size.

Schematic grid layout anatomy
Schematic grid layout anatomy

Behavior and Interaction

Scrolling

Cards can be scrolled vertically or horizontally, depending on the layout. You can also combine different layouts, for example, a carousel with cards and a list with cards below it.

Animation: Horizontal scrolling in carousel combined with a vertical scrolling list
Animation: Horizontal scrolling in carousel combined with a vertical scrolling list

Adaptive Design

The layouts are designed to be compatible with multiple devices. They change according to the window size class and automatically adjust the number of columns to ensure a visually appealing and user-friendly layout. Depending on the window size class, the card width and height adjust automatically, ensuring that the content remains fully visible.

If there is a navigation rail or navigation drawer, the number of columns decreases and adjusts to the remaining screen width.

Schematic compact grid layout with 4 columns (left) and expanded with 12 columns (right)
Schematic compact grid layout with 4 columns (left) and expanded with 12 columns (right)

Resources

SAP Fiori for Web: Cards (SAPUI5), Cards (Web Component)

Related Components/Patterns: Carousel Layout, Staggered Layout, Cards Overview

Tags

Tags are used to display quick and useful bits of information to the user, such as keywords, labels, categories, or statuses.  

Tags displayed in a row
Tags displayed in a row

Usage

Tags display complementary information that relates to the object. They use a different visual representation than plain text and serve as independent bits of information. When incorporating tags into your app, it is crucial to keep the following aspects in mind:

Do
  • Keep tag labels concise.
  • It is recommended to maintain wording to a maximum of two words per tag.
Don't
  • Don’t write full sentences within a tag.
  • Don’t place icons or images within a tag.
  • Don’t overload the user by including an excessive number of tags or very long text values.
Positive example for showing concise tags in a tag row in a card
Positive example for showing concise tags in a tag row in a card
Negative example for listing an excessive number of tags in an object cell and placing icons in a tag
Negative example for listing an excessive number of tags in an object cell and placing icons in a tag

Anatomy

A. Container

The are two styles available for containers: filled and outlined.

B. Label

The label indicates keywords or other bits of information.

Anatomy of a tag
Anatomy of a tag

Behavior and Interaction

Tags are not interactive. If there is more than one tag, they line up in a horizontal layout one after the other. The tag row can be configured to wrap to the next line depending on the parent container.

Variations

Color

Default vs. Accent

The default tag color is grey, but it can also be displayed in many different colors of the accent color palette.

Tag variations
Tag variations

Resources

SAP Fiori for iOS: Tags

Related Components/Patterns: Cards Overview, Object Header, Object Cell

Status Info Label

The status info label component can be used to provide complementary bits of information.

Status info label displayed in a horizontal and stacked layout
Status info label displayed in a horizontal and stacked layout

Usage

The status info label displays complementary information that relates to the object. It is a flexible combination of a text value and an icon. When incorporating a status info label into your app, it is crucial to keep the following aspects in mind:

Do
  • Keep text values concise.
  • Customize icon and label layout based on your needs.
Don't
  • Don’t use complete sentences within a status info label item.
  • Don’t include links. Status info label items are not interactive.
  • Don’t overload the user by including an excessive number of status info label items within a row or a stack.
Positive example for using a status info label row
Positive example for using a status info label row
Negative example of using very long text values and including links
Negative example of using very long text values and including links

Anatomy

A. Icon (Optional)

The icon is a visual illustration that can complement the text value or be used independently. If it is combined with a label, it can be placed as a leading or trailing element.

B. Label (Optional)

The label indicates short information bits such as keywords, categories, or status. The text value can be used independently or combined with an icon.

C. Dot (Optional)

A dot can be used to separate status info label items in a horizontal alignment.

Anatomy of a status info label row
Anatomy of a status info label row

Behavior and Interaction

Status info label items are not interactive. If there is more than one status info label item, they may either line up in a horizontal layout one after the other or be stacked under each other. A stacked column can be either left or right-aligned.

Variations

Components

A. Icon Only

Shows visual information such as an icon, image, logo, or avatar.

B. Label Only

Text value that implies a brief description, for example, it can show the priority or urgency of the object’s status. Maintain wording to a maximum of two words.

C. Leading Icon

A leading icon is placed in front of the label.

D. Trailing Icon

A trailing icon follows the label.

Variations of status info label components
Variations of status info label components

Layout

Horizontal vs. Stacked

Status info label items can be arranged horizontally, optionally dividing them with a dot, and can either be wrapped to the next line or be stacked vertically.

Status info label row (left) and status info label stack (right)
Status info label row (left) and status info label stack (right)

Color

Default vs. Semantic

The default tag color is grey, but status info label items can also be displayed in many different colors of the semantic color palette.

Resources

Development: FioriStatusInfoLabel

Related Components/Patterns: Cards Overview, Object Header, Object Cell

KPIs

KPIs (key performance indicators) are metrics used to evaluate the success of an organization, an individual, a group, or an activity. They serve to highlight the current value of an object or as a summary of the object. KPIs can be displayed in a header, in the content area of an object, on a card, or in a modal window.

KPI header on mobile (left), in a card component (middle), and in a widget component (right)
KPI header on mobile (left), in a card component (middle), and in a widget component (right)

Usage

Do
  • Use KPIs for numerical metrics.
  • Use abbreviations for units of measurement in the KPI prefix and/or suffix that may be too long. For example, “m” or “mil” can be used in place of “millions”.
Don't
  • Don’t use KPIs for non-numerical metrics.
  • Don’t mix standard KPIs with progress view KPIs when nesting KPIs in an object. Standard KPIs should only be grouped and displayed with one another, likewise with progress view KPIs.
  • Don’t write overly long or descriptive KPI labels. KPI labels should be concise while also clearly communicating the KPI meaning.

Anatomy

Standard KPIs and KPIs with Icons

A. Trend/Icon

The KPI icon is used to provide a visual representation of information related to the KPI metric. It defaults to a trend symbol for standard KPIs. With the KPI Icon variant, you can choose an icon from the Icon Explorer.

B. Prefix and Suffix

The KPI prefix and suffix are used to define units of measurement for the KPI metric and are placed right in front or after the KPI numeric value.

C. Value(s)

The KPI value is the core element of the component. It can either be a single value with one number or two values with a combination of numbers, prefixes, and suffixes, such as “15hr12mins”.

D. Label

The KPI label is used to provide additional information about the KPI.

Anatomy of a standard KPI
Anatomy of a standard KPI
Anatomy of a KPI with icon
Anatomy of a KPI with icon

KPI Progress View

A. Progress View

The progress view displays a visual representation of completeness using a circular progress track.

B. KPI

The KPI is a component nested within the progress view KPI component. See information on KPIs above for anatomy.

C. Title

The progress view title is used to provide additional information about the overall KPI progress view.

Anatomy of a KPI progress view
Anatomy of a KPI progress view

Behavior and Interaction 

A KPI is a display-only component used to show a key figure.

Variations 

KPIs

Standard KPI

The standard KPI is available in three different sizes and can be highlighted with semantic colors. Standard KPIs may be used for measurements such as meters, Celsius, percentage, etc.

Small KPI (left), medium KPI in a semantic color (middle), and large KPI (right)
Small KPI (left), medium KPI in a semantic color (middle), and large KPI (right)

KPI with Icon

The KPI with icon is available in three sizes and can be highlighted with semantic colors. The iconography helps represents the KPI metric. For example, a document icon can be used to show there are files associated with a KPI.

Small KPI with icon (left), medium KPI with icon (middle), and large KPI with icon in a semantic color (right)
Small KPI with icon (left), medium KPI with icon (middle), and large KPI with icon in a semantic color (right)

KPI Progress View

The KPI progress view utilizes a circular form that represents the progress of its KPI metric. It can be used to show the step progress of a goal, percentage of completion of a task, and more.

Small KPI progress view with a KPI in a semantic color (left), medium KPI progress view (middle), and large KPI progress view with a KPI with icon (right)
Small KPI progress view with a KPI in a semantic color (left), medium KPI progress view (middle), and large KPI progress view with a KPI with icon (right)

Resources

Development: FioriNumericKpi, FioriProgressViewKpi

SAP Fiori for iOS: KPIs

Related Components/Patterns: Cards Overview, Card Header, Card Body

Circular Progress Indicator

A circular progress indicator is a visual element that displays the status of ongoing processes, such as logging in, uploading files, or refreshing content in a circular shape. It typically consists of a circular track and a moving indicator that fills up the track as the progress increases.

Content refresh with circular progress indicator (left) and partial loading with circular progress indicator (right)
Content refresh with circular progress indicator (left) and partial loading with circular progress indicator (right)

Usage

Do
  • Use a circular progress indicator if the wait time exceeds one second. 
  • Use a circular progress indicator for the following scenarios: 
    • User-triggered content refresh by pulling down or up. 
    • Partial screen loading that requires blocking user interactions. 
    • Full-screen processing, such as during payment checkout. 
  • 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 at the end of the label, for example, 60%, 30/100 etc.
  • Labels are mandatory for error and success states.
Don't
  • Don’t transition from a circular to a linear 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 error/fail and success states. 

Anatomy 

Active State

A. Indicator

B. Track

C. Label (Optional)

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 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 example of a circular progress indicator
Text wrapping example of a circular progress indicator

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. 

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.

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 

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. 

 

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

Swipe-to-Refresh

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

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 

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. 

Regular Use Cases

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

Checkout Use Cases

Checkout use cases are processing states triggered by user actions. During a checkout process, any user action on the affected content is not encouraged; it may interrupt the process. Use only the indeterminate variant in these cases. A checkout use case can be one of the following types:

A. Same-Screen Loading

A circular progress indicator can be used when a screen is in progress to transition to a new screen, triggered by a user action. The circular progress indicator is placed in a message box on top of a dialog overlay. Use the message to briefly inform users about the progress. The dialog overlay and the message disappear once the loading is complete.

If needed, use a banner or a snackbar to inform users about an error state.

Same-screen loading example with a circular progress indicator in a message box
Same-screen loading example with a circular progress indicator in a message box

B. Partial Loading

A circular progress indicator can be used when a part of the screen content needs to be loaded or refreshed. The circular progress indicator is placed on the top of an overlay that covers the content. The progress indicator and the overlay disappear once the loading is complete. No message is needed for a partial loading use case.

If needed, use a banner or a snackbar to inform users about an error state.

Partial loading example with a circular progress indicator on top of a card
Partial loading example with a circular progress indicator on top of a card

Resources

Development: FioriCircularProgressIndicator

SAP Fiori for iOS: Feedback Indicators

Material Design: Progress Indicator

Step Progress Indicator

The step progress indicator is a progress indicator for tracking and displaying a user’s state in a user flow. It allows the user to navigate to another step in both the horizontal view and the vertical “All Steps” view.

A step can be displayed as either a regular step or a dynamic step.  

Step progress indicator in horizontal view (left), vertical “All Steps” view (middle), and different states (right)
Step progress indicator in horizontal view (left), vertical “All Steps” view (middle), and different states (right)

Usage

Do
  • A step progress indicator should at least show two steps. 
  • Use dynamic steps for sub-steps and steps which are dependent on default steps. 
  • Displaying a partial view of the last step on the screen for a scrollable step progress indicator is highly recommended. 
  • Keep step names short – we recommend no more than two lines of text. 
Don't
  • Try to avoid showing both header and step names under step nodes. If the flow is short, try not to use the “All Step” button. Display the full step names in the horizontal view. 
  • Don’t count dynamic steps in the total number of steps.  
  • Don’t show a partial view of a step on the screen if the step progress indicator is not scrollable. 
Display a partial view of the last step on the screen to indicator more steps
Display a partial view of the last step on the screen to indicator more steps
Try not to cut off the edge of the last step on the screen
Try not to cut off the edge of the last step on the screen
If the flow is short, hide the header and the “All Steps” button. Display the full step names in the horizontal view
If the flow is short, hide the header and the “All Steps” button. Display the full step names in the horizontal view
Try to avoid showing both header and step names under step nodes. If the flow is short, try not to use the “All Steps” button.
Try to avoid showing both header and step names under step nodes. If the flow is short, try not to use the “All Steps” button.

Anatomy

Horizontal View

A. Current Step Name (Optional) 

Name of the selected step. Show the current step name in the header if no step names are displayed under the step nodes. 

B. “All Steps” Button (Optional)

The “All Steps” button shows the total number of steps and directs users to an overview page of the steps. Show the “All Steps” button when the flow is long.

C. Step Node

The step node is a numeric circle that indicates the sequence of the flow. It also indicates the state of the step. You can also use letters or other simples to replace the number.

D. Line

A line is used to connect the nodes. Don’t use a line after the last node.

E. Step Name (Optional)

The step name of each step is shown below the step node. Only show step names when the header of the current step name is disabled.

Step progress indicator with a header (top) and without a header (bottom)
Step progress indicator with a header (top) and without a header (bottom)

Vertical View

A. Step Node

The step node is a numeric circle that indicates the sequence of the flow. It also indicates the state of the step. You can also use letters or other simples to replace the number.

B. Line

A line is used to connect the nodes. Don’t use a line after the last node. In the vertical view, the length of the line is dependent on the step name text.

C. Step Name

The step name of each step is shown next to the step node. In the vertical view, show the full text of the step name.

Step progress indicators in a vertical view
Step progress indicators in a vertical view

Behavior and Interaction

Text Wrapping

In the horizontal view, a step name allows truncation. In a vertical view, a step name allows text wrapping to show the full text. Always try to be concise for the names. Otherwise, it may distract users when they are focusing on the task on the screen.

The current step name truncates after one line. Full text is available in “All Steps” view.

A step name can wrap up to two lines. Adjust the width of the line to allow more space for the text. If any step name is longer than two lines, use the “All Steps” button to allow users to view the full text

The current step name truncates if it’s two long (top) and the step name under the step node truncates after two lines (bottom).
The current step name truncates if it’s two long (top) and the step name under the step node truncates after two lines (bottom).
Show full text of the step name in the vertical view
Show full text of the step name in the vertical view

Value States

Default

Idle state of an enabled step.

Default state of a horizontal step (left) and a vertical step (right)
Default state of a horizontal step (left) and a vertical step (right)

Active

Selected state of a step.

Active state of a horizontal step (left) and a vertical step (right)
Active state of a horizontal step (left) and a vertical step (right)

Complete

Triggered when required actions are complete and users have navigated to another step.

Complete state of a horizontal step (left) and a vertical step (right)
Complete state of a horizontal step (left) and a vertical step (right)

Error

Triggered when users already navigated to another step but required actions of this step are incomplete.

Error state of a horizontal step (left) and a vertical step (right)
Error state of a horizontal step (left) and a vertical step (right)

Error Active

Triggered when users tap on a step that has incomplete required actions.

Error active state of a horizontal step (left) and a vertical step (right)
Error active state of a horizontal step (left) and a vertical step (right)

Read-Only

A read-only step is a step that is not tappable.

Read-only state of a horizontal step (left) and a vertical step (right)
Read-only state of a horizontal step (left) and a vertical step (right)

Navigation and Interaction

Tap on the Node

When users tap on a step indicator node, they are navigated to this specific step.

If the step is already on the screen, the step node stays without moving.

If the user scrolls to tap a step beyond what was on the screen, the selected step is displayed as the first step in the indicator.

When users tap on a step indicator node, they are navigated to this specific step
When users tap on a step indicator node, they are navigated to this specific step

View All Steps

Users can tap on the “All Steps” button to view all steps vertically on a new screen.

If the user taps on a step from the “All Steps” list, they are navigated to the selected step. The selected step is displayed as the first step in the indicator.

Users can tap on the “All Steps” button to view all steps vertically on a new screen
Users can tap on the “All Steps” button to view all steps vertically on a new screen

Scrolling

Users can press and scroll left or right on the step progress indicator to view steps that are outside the screen. The indicator automatically comes back to the active step when users tap anywhere on the screen.

Users can scroll left or right on the step progress indicator to navigate to another step
Users can scroll left or right on the step progress indicator to navigate to another step

Variations

Dynamic Steps

Dynamic steps are used to indicate a sub-step or an indeterminate step. Same as regular steps, dynamic steps also have different value states: default, active, error, error active, and read-only.

From left to right: dynamic steps in horizontal view, dynamic steps in vertical view, and dynamic steps in different states
From left to right: dynamic steps in horizontal view, dynamic steps in vertical view, and dynamic steps in different states

Adaptive Design

A step progress indicator can adapt to both mobile and tablet sizes. For the tablet version, the horizontal step progress bar can have broader width for each step than the mobile version, and the “All Steps” view is displayed in a dialog window.

Horizontal view on mobile (left) and tablet (right)
Horizontal view on mobile (left) and tablet (right)
"All Steps” view on mobile (left) and tablet (right)

Resources

Development: StepperProgress

SAP Fiori for iOS: Step Progress Indicator

SAP Fiori for Web: Wizard Floorplan

Related Components/Patterns: Header, Persistent Footer, Dialog

Linear Progress Indicator

A linear progress indicator visually represents the status of ongoing processes, such as logging in, uploading files, or refreshing content by animating an indicator along a fixed track. It communicates the state of an app and indicates available actions, such as whether users can navigate away from the current screen.  

Login screen with linear progress indicator (left) and uploading files (right)
Login screen with linear progress indicator (left) and uploading files (right)

Usage

Do
  • Use a linear progress indicator if the wait time exceeds one second.
  • Use a linear progress indicator for the following scenarios: 
    • Inside a container, where no user interaction is blocked.
    • When a more precise progress update is required. 
    • When there is limited space and a complex message needs to be conveyed.   
  • 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 at the end of the label, for example, 60%, 30/100 etc. 
  • Labels are mandatory 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 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

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)

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 example of a linear progress indicator
Text wrapping example of a linear progress indicator

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. 

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. 

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

Success State

The success state appears after the successful completion of a process or request. The indicator turns green 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 

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. 

 

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

Variations 

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

Resources

Calendar

The calendar view provides a visual overview of a week, a month, or multiple months. It can filter and display different types of content, such as events, agendas, or schedules, based on the time dimension.

Example of calendar view on compact (left) and expanded screen (right)
Example of calendar view on compact (left) and expanded screen (right)

Usage

Do
  • Use calendar view to display a visual overview of a week or a month.
  • Use calendar view to filter the information based on days. For example, events, tasks, and deadlines.
Don't
  • Don’t use calendar view for date selection or multiple date selection in forms. Use pickers instead.
  • Don’t use calendar view when the available screen space is limited and displaying the calendar permanently would take up too much space.

Anatomy

The structure is composed of four parts: calendar header (optional), week label container, date label container, and dragging handle (optional).

The space below the calendar view container is available for different configurations. for instance, using object cells as an agenda or timeline as a timesheet.

A. Calendar Header

The calendar header includes the title, subtitle (optional), and buttons.

B. Week Label Container

The week label container displays the seven days of a week. You can customize the format to match your local preference.

C. Date Label Container

The date label container shows all the days of the month/week in a grid view.

D. Dragging Handle (Optional)

The dragging handle provides a visual cue on the dragging behavior to expand the week view and collapse the month view.

Anatomy of a calendar
Anatomy of a calendar

Behavior and Interaction

Navigate

To navigate between months/weeks, users can use swiping gestures or tap on buttons. To ensure accessibility, it is important to provide visible navigation buttons that support all input channels such as touch screen, keyboard, and mouse. The buttons can be customized to your preference, for example, icon buttons or text buttons.

User interaction of navigating via swiping and tapping buttons
User interaction of navigating via swiping and tapping buttons

Expand and Collapse

If the calendar has a dragging handle (optional), users can expand it from week view to month view by swiping down. Similarly, they can collapse it from month view to week view by swiping up.

User interaction of dragging to expand and collapse
User interaction of dragging to expand and collapse

Back to Today

If the calendar includes a “back to today” button, the user can return to the current month/week by tapping on the button.

User interaction of returning to today
User interaction of returning to today

Variations

Calendar Views

There are different types of calendar views. Select the one that best suits the purpose of your app and start designing from there.

  1. Month View (Default)
  2. Week View
  3. Expandable View – Users can switch from the default week view to month view by swiping up on the dragging handle.
Types of calendar view containers (from top to bottom): week view, month view, and expandable view
Types of calendar view containers (from top to bottom): week view, month view, and expandable view

Calendar Header

The calendar header provides the following layouts:

  1. Left-Aligned

The title is left-aligned. A leading button or icon and a maximum of three trailing buttons are supported.

  1. Center-Aligned

The title is center-aligned. A leading button or icon and a maximum of two trailing buttons are recommended.

 

The header also supports the following types of titles:

  1. Single-Line Title

It can be used to show the displayed month and year, or the topic of the calendar.

  1. Double-Line Title

It can be used to show the main title together with a subtitle for additional information.

  1. Large Title

The title is emphasized by using a larger font size and white space. This design can be applied when showing a calendar on the home screen or at the top of the page.

The text contents can be customized to reflect the month/week on display.

From left to right: left-aligned title, center-aligned title; from top to bottom: single-line title, double-line title, large title
From left to right: left-aligned title, center-aligned title; from top to bottom: single-line title, double-line title, large title

Calendar Week Labels

The format of the calendar week labels can be customized to match your local preference. Besides, the calendar provides the following types of start day of the week:

  1. Sunday (Default) – US Standard
  2. Monday – Europe, Asia, Oceania Standard
  3. Saturday – Middle East Standard
Week label starting from Sunday (top), Monday (middle), and Saturday (bottom)
Week label starting from Sunday (top), Monday (middle), and Saturday (bottom)

Calendar Day Labels

The calendar supports the following states:

  1. Default – days of the month/week being displayed
  2. Today – the current system date
  3. Selected – the selected date
  4. Today + Selected – only appears when the selected date is today
  5. Out of Month – days in the previous or next month/week
Date label states from left to right: default, today, selected, today and selected, out of month
Date label states from left to right: default, today, selected, today and selected, out of month

Status Indicators

The calendar can display status information via status indicators, which should be a set of simple icons that are easy to recognize. A legend row is required to ensure that the status meanings are accessible.

Calendars with status indicators: month view (top), week view (bottom)
Calendars with status indicators: month view (top), week view (bottom)

Alternate Calendar

The calendar can show two calendar types on the same frame. The alternate calendar date label is displayed below the primary calendar date label, and the year and month are shown on the subtitle as a default. Below are the available calendar types for both the primary and the secondary calendar:  

  1. Gregorian (default primary calendar)
  2. Chinese
  3. Hebrew
  4. Islamic
  5. Japanese
Calendar with alternate calendar labels
Calendar with alternate calendar labels

Adaptive Design

The calendar view adapts to different window sizes.

In compact windows, the width of the week labels and date labels expand to full width.

In medium windows, the week labels and date labels are fixed to 72dp.

In expanded windows, the week labels and date labels are fixed to 100dp.

Calendar view adapting to compact (left), medium (middle), and expanded windows (right)
Calendar view adapting to compact (left), medium (middle), and expanded windows (right)

Resources

Development: FioriCalendar

SAP Fiori for iOS: Calendar

Related Components/Patterns: Pickers, Object Cell, Timeline View

Contact Cell

A contact cell, commonly found in an object detail, gives quick access to the various methods of communicating with a contact. A contact cell consists of an image, labels (headline, subheadline), description, and contact actions.

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

Anatomy

A. Detail Image (Optional)

A rounded frame that displays an image of a contact. If no image is available, an initial is displayed.

B. Headline

Used for the name of the contact.

C. Subheadline (Optional)

Can be used to add further information about the contact, such as a job role.

D. Actions

You can set four different actions – calling, video calling, messaging, and emailing.

On phones, there is a maximum of three actions, on tablets, a maximum of four.

Contact cell anatomy
Contact cell anatomy

Behavior and Interaction

Contact Cell

Tapping on the contact cell itself navigates the user to the profile detail screen of the contact.

Call Action

Tapping on the call icon triggers an alert prompting the user to confirm whether they want to make the call.

Video Action

Tapping on the video icon triggers an alert prompting the user to confirm whether they want to make the video call.

Message Action

Tapping on the message icon triggers a modal where the message can immediately be drafted and sent.

Email Action

Tapping on the email icon triggers a modal where the email can immediately be drafted and sent.

Adaptive Design

The contact cell is supported on both phone and tablet devices. The width of the name and title container is flexible and can be set by you.

You can use up to four actions, however, if four actions are used, a profile image can’t be used.

Contact cell in phone width (top) and tablet width (bottom)
Contact cell in phone width (top) and tablet width (bottom)

Resources

Development: ContactCell

SAP Fiori for iOS: Contact Cell

Related Components/Patterns: Object Cell

Navigation Rail

The navigation rail provides a top-level navigation to three to seven core destinations in an app.

Navigation rail with floating action button, profile, and four destinations
Navigation rail with floating action button, profile, and four destinations

Usage

A rail can be used as the sole navigation component on larger screens, such as tablet or desktop devices.

Do
  • Use the navigation rail for three to seven main destinations.
  • Use the navigation rail on tablet and desktop interfaces.
  • Represent each destination with an icon and label or icon only.
  • Keep the label of destinations short and concise.
Don't
  • Don’t use the navigation rail if there are fewer than three destinations, instead use tabs.
  • Don’t use the navigation rail if there are more than seven destinations, use the navigation drawer instead.
  • Don’t use the navigation rail on mobile devices, use the navigation bar or the modal navigation drawer instead.
  • Don’t truncate or shrink text
  • Avoid text wrapping.

Anatomy

A. Container

The container includes all destinations including icons, labels, active indicator, and optional elements, such as a floating action button (FAB) and profile.

B. Icon

Meaningful icons visualize the app destinations. Use filled icons for the selected destination and unfilled icons for unselected destinations.

C. Label Text (Optional)

The label text provides a short and concise description of the destination.

D. Active Indicator

The active indicator highlights the selected destination.

E. Small Badge (Optional)

The small badge can be used to display a change, for example, a new notification.

F. Large Badge with Value (Optional)

The large badge with value can be used to show a number for status changes.

G. Floating Action Button (Optional)

The floating action button (FAB) can be placed above the navigation destination for the app’s key action.

H. Profile/Avatar/Initials (Optional)

We recommend using an image so that the user can quickly identify the person the profile belongs to. Images of people should always be in a circle. The profile can be top or bottom aligned. If you have a FAB and profile in the navigation rail, you can only use the bottom aligned profile.

Navigation rail anatomy
Navigation rail anatomy

Behavior and Interaction

When the user taps on a destination or one is focused in the navigation rail, the user is directed to the navigation destination associated with that icon and label. Selected destinations are visually highlighted by the active indicator and the filled icon.

The navigation rail is placed on the edge of the screen. On the left side for left-to-right languages and on the right side for right-to-left languages.

Selecting another destination in the navigation rail
Selecting another destination in the navigation rail

Scrolling

While scrolling vertically and horizontally, the navigation rail remains fixed. If the content scrolls horizontally, the navigation rail increases elevation and lets the content scroll behind it.

Behavior of navigation rail when scrolling vertically
Behavior of navigation rail when scrolling vertically

Adaptive Design

Use a navigation rail uses 100% of the screen height. The destinations are aligned as a group on top of the rail. On small screens, replace the navigation rail with a more appropriate component, such as a navigation bar or modal navigation drawer.

A modal navigation drawer can be combined with the navigation rail when there are secondary destinations or actions that don’t belong in the navigation rail. The modal navigation drawer can repeat the navigation destinations from the navigation rail and can include additional navigation destinations, such as secondary destinations or settings. By tapping the menu icon, the user can open and close the modal navigation drawer.

Combination of a navigation rail with a navigation drawer
Combination of a navigation rail with a navigation drawer

Variations

A. Label and Icon

The default navigation rail consists of a label and an icon.

B. Icon Only

For a simplified navigation rail, the labels can be omitted. The icons should always be unambiguous for users.

C. Mixed

The mixed variation is used to emphasize the selected destination with label and icon and the unselected destinations are displayed with icon only. Use this variation only if the icons have a clear meaning to users.

Navigation rail with label and icon (left), icon only (middle), and label with icon only for selected destination (right)
Navigation rail with label and icon (left), icon only (middle), and label with icon only for selected destination (right)

Resources

Development: FioriNavigationRail

Material Design: Navigation rail

Navigation Drawer

The navigation drawer provides access to different destinations in an app.
Navigation drawers can be permanently visible or opened and closed by tapping a menu icon.

Modal navigation drawer (left) and standard navigation drawer (right)
Modal navigation drawer (left) and standard navigation drawer (right)

Usage

Do
  • Use the navigation drawer for five or more destinations.
  • Use the modal navigation drawer primarily on mobile
  • Use the standard navigation drawer on larger screens, such as tablets.
  • Replace the navigation rail or bar on large screens with the navigation drawer.
  • Keep the title of destinations short and concise.
Don't
  • Don’t use the navigation drawer for fewer than five destinations on mobile devices, use the navigation bar instead.
  • Try to avoid wrapping text into more than two lines.
  • Don’t truncate or shrink text.

Anatomy

A. Container
The container includes all destinations including icons, labels, active indicator, and an optional profile.

B. Profile/Avatar/Initials (Optional)
We recommend using an image so that the user can quickly identify the person the profile belongs to. Images of people should always be in a circle.

C. Name Text (Optional)
The name must include the first and last name of the person.

D. Details Text (Optional)
The details text is optional and can contain secondary information about the person, such as their job title or location.

E. Headline (Optional)
The headline can be used for a parent heading.

F. Section Header
The section header can be used to group related destinations.

G. Icon (Optional)
Meaningful icons visualize the app destinations. Use filled icons for the selected destinations and unfilled icons for unselected destinations.

H. Active Indicator
The active indicator highlights the selected destination.

I. Label Text
The label text provides a short and concise description of the destination.

J. Badge Value (Optional)
The badge value shows a number for status changes.

K. Divider (Optional)
The divider allows to create related groups of destinations.

L. Scrim (Only Available for Modal Navigation Drawer)
The scrim prevents the interaction with the rest of the app content and is displayed behind the modal navigation drawer.

Navigation drawer anatomy
Navigation drawer anatomy

Behavior and Interaction

The navigation drawer is placed on the edge of the screen. On the left side for left-to-right languages and on the right side for right-to-left languages.

When the user taps on a destination, the user is directed to the navigation destination. The selected destination is visually highlighted with the active indicator and a filled icon.

Selecting another navigation destination in the modal navigation drawer
Selecting another navigation destination in the modal navigation drawer

If there is more content than fitting in the drawer, the drawer can be scrolled vertically.

Horizontal scrolling in the standard navigation drawer
Horizontal scrolling in the standard navigation drawer

Adaptive Design

Use the modal navigation drawer on mobile screens, however, also consider the navigation bar if there are fewer than five navigation destinations.

For medium sized screens switch to a collapsible standard navigation drawer or to a navigation rail.

On large screen sizes, use the permanently visible standard navigation drawer.

Use the modal navigation drawer in combination with the navigation rail when there are secondary destinations or actions that don’t belong in the navigation rail. The modal navigation drawer can repeat the navigation destinations from the navigation rail and can include additional navigation destinations, such as secondary destinations or settings. The user can open and close the modal navigation drawer by tapping the menu icon.

Combination of a navigation rail with a navigation drawer
Combination of a navigation rail with a navigation drawer

Variations

Modal Navigation Drawer

The modal navigation drawer has a scrim to prevent the interaction with the app content. It is mainly used on mobile devices. On tablet devices, replace the modal navigation drawer with the standard navigation drawer.

The user can open the modal navigation drawer by tapping the menu icon.

The user can close the modal navigation drawer by selecting a destination, tapping on the scrim, or swiping to the drawer’s anchoring edge. If there is a “Back” button on the navigation bar, the user can also close the drawer with this button.

Opening and closing the modal navigation drawer
Opening and closing the modal navigation drawer

Standard Navigation Drawer

The standard navigation drawer is located next to the app’s content and can be permanently on screen, which is best used when users frequently have to switch between destinations. If users should focus more on the app content, they can close and open the standard navigation drawer by tapping a menu icon.

Use the standard navigation drawer only on tablet devices. For mobile devices, use the modal navigation drawer instead.

Collapsable standard navigation drawer with menu icon
Collapsable standard navigation drawer with menu icon

Resources

Development: FioriNavigationDrawer

SAP Fiori for iOS: Sidebar

Material Design: Navigation Drawer

Data Table Card

The data table card provides a preview of historic data in a table format. Currently, data table cards display up to four rows and two columns that can be customized to fit a variety of use cases. This card can also be used as an entry point to a connected data table.

Collection of data table cards on mobile (left) and tablet (right)
Collection of data table cards on mobile (left) and tablet (right)

Usage

Do
  • Use the data table card when the user needs to track the current and historical development of data over time.
  • Use the data table card when comparing two columns of data parameters.
  • Use the data table card as an entry point to a fullscreen data table, or another defined location.
Don't
  • Don’t use the data table card when the user needs to compare more than two attributes across the data set.
  • Don’t use the data table card when the user needs to take actions at a card level. Consider using the object card or the list card for inline and footer actions.

Anatomy

A. Title Area

The title area has a title, a subtitle, a timestamp, and a photo thumbnail. A title is required and can wrap up to two lines. The thumbnail, subtitle, and timestamp are optional. 

B. Entries

We recommend including four entries maximum. To accommodate various use cases, you can configure entries to adjust text size, weight, and color. As default, each entry allows two lines at maximum, truncating after two lines. The icon is optional. 

C. More Entries

The more entries section helps indicate there are more items in the data set. If there are no additional entries, “No more entries is displayed. 

Anatomy of the data table card
Anatomy of the data table card

Behavior and Interaction

Touch Target

The data table card only has one action, meaning that the whole card is a touch target.

Touch target of the data table card
Touch target of the data table card

Navigation

When tapped, the data table card navigates to a full screen data table or to another defined location.

Tap on the card area navigate to a data table or a defined location
Tap on the card area navigate to a data table or a defined location

Adaptive Design

The data table cards on mobile follow a vertically stacked single-column layout. The tablet displays a two or three-column grid layout. When utilizing cards with auto-adjusted height, there is also the option to display a masonry layout on the tablet.

The card carousel follows the same number of columns as the grid with adjusted card width, so an additional card is visible and cut off at the end. The slice of a card at the end indicates horizontal scrolling. In a masonry layout, there is no horizontal scrolling.

Collections of data table cards on mobile (left) and tablet (right)
Collections of data table cards on mobile (left) and tablet (right)

Variations

Data table card entries can be customized to adjust the section’s visual treatment, providing flexibility for different use cases. The icon can also be changed from the default “event note icon. When displaying a status, we recommend adding an additional visual element to convey the semantic meaning, such as adding an icon, boldening the text, or changing the text color. 

Data table card variations from left to right: Data table card with the title only (left), data table card with semantic values (center left), data table card with subtitle (center right), and data table card with thumbnail (right)
Data table card variations from left to right: Data table card with the title only (left), data table card with semantic values (center left), data table card with subtitle (center right), and data table card with thumbnail (right)

Resources

Development: DataTableCard

SAP Fiori for iOS: Analytical Data Table Card 

Related Components/Patterns: Cards Overview, Data Table

Top App Bar

The top app bar contains actions and content based on the current screen in an app.
This includes navigation, title, and actions. The elements in the top app bar are specific to the current screen, but the top app bar can also contain consistent elements across an app.

Top app bar on mobile (left) and tablet (right)
Top app bar on mobile (left) and tablet (right)

Usage

Do
  • Use an overflow menu if there are more than three icon buttons on mobile and four icon buttons on tablet. 
  • Ensure consistency of the position of the close/cancel and back icons. Generally, they are on the left side of the navigation bar. 
  • Keep the title text short and concise. 
  • For the collapsing layout, combine the large bar and the small bar with the left-aligned title.
  • Try to use icon buttons due to limited space. 
Don't
  • Don’t use the profile and overflow menu together. 
  • Don’t provide multiple similar actions on the navigation bar. For example, if a back icon and a save button trigger the same action, one action element is enough. 
  • Don’t manipulate the height of the top app bar, use the default sizes. 
  • Try to avoid truncation or shrinking of the title text. 

Anatomy

A. Leading Elements (Optional)

The optional leading element can hold a logo or a navigation icon. The navigation icon can be, for example, a back, close/cancel, or menu icon. The recommended maximum size of the logo is 24dp height and 112dp width. The leading element is aligned on the left side of the top app bar.

B. Title

The title should be concise and fit into the top app bar. Try to avoid truncation or shrinking of text. If the title is long, use the large top app bar. When using the object/profile header, the title/subtitle area in the top app bar needs to be empty to avoid redundant titles. Scrolling down the title of the object/profile header, moves to the top app bar.

C. Subtitle (Optional)

An optional subtitle can be included into the small app bar. Try to keep the subtitle short and concise.

D. Trailing Elements (Optional)

On the right side of the of the bar, you can place up to three trailing elements on mobile and up to four elements on tablet. Trailing icons can be action icons, buttons, and an overflow menu or a profile.
Arrange the action icons in order of importance from left to right. Less important or secondary actions can be included into the overflow.

E. Container

The container includes the leading elements, title, subtitle, and trailing elements of the top app bar.

Anatomy of small (top) and large (bottom) top app bar
Anatomy of small (top) and large (bottom) top app bar

Behavior and Interaction

Scrolling

For the small top app bar, the following scrolling interactions are available: 

  • Pinned (default) 
  • Scroll-off screen 

 

Small Top App Bar

When the small top app bar is pinned, the bar remains at the top of the screen. On scrolling, an elevation is added to the app bar and the content scrolls underneath the bar. 

 

Animation of pinned small top app bar
Animation of pinned small top app bar

Using the scroll-off screen interaction, the top app bar applies a compress effect and scrolls off-screen with the content and returns when the user reverse scrolls. In addition, upon scroll, the app bar increases elevation and lets content scroll behind it.

Animation of scroll-off screen small top app bar
Animation of scroll-off screen small top app bar

Large Top App Bar

The large top app bar uses the collapsing layout. If a collapsing layout is used for the top app bar, the large bar is the initial state, and when scrolling up, the large bar transforms into the small top app bar. This is only available for the small app bar with a left aligned title.

Upon scrolling, the app bar increases elevation and lets the content scroll behind it. At the same time, the collapsing large top app bar transforms into a small top app bar. The app bar follows the behavior of the small top app bar (see pinned and scroll-off screen interaction above).
When the user scrolls back to the top of the screen, the app bar expands back to the large bar.

 

For the title, you can choose the following transitions: 

  • Fade mode

The large title fades out and translates, and the small title fades in. 

  • Scale mode

    The large title continuously scales and translates into the position in the small bar. 

Animation of collapsing layout from the large to small top app bar
Animation of collapsing layout from the large to small top app bar

Contextual Action Bar

Contextual action bars provide actions for selected items or tasks. A top app bar can transform into a contextual action bar, remaining active until an action is taken or dismissed.

Top app bar (left) transforms into contextual action bar (right)
Top app bar (left) transforms into contextual action bar (right)

Nested Actions

Trailing Elements

You can place up to three trailing elements on mobile and up to four elements on tablet on the right side of the app bar. The following trailing elements are available: 

  • Profile 
  • Icon 
  • Button 

 

The profile can be combined with one icon or one button on mobile. On tablet, you can combine the profile with two icons or one button. We recommend placing a profile with a limited number of actions on the main home page in an app. The actions are placed on the left side next to the profile. Note that you can’t combine the overflow with a profile.

Profile as trailing element in top app bar on mobile (top) and tablet (bottom)
Profile as trailing element in top app bar on mobile (top) and tablet (bottom)

You can place up to three icons on mobile and up to four icons on tablet. If there are more icons, the remaining actions must be placed into the overflow. 
Sort the icons regarding their priority from left to right. The most used icon should always be placed on the left. Also consider placing less important or secondary actions in the overflow. 

Icons as trailing elements in top app bar on mobile (top) and tablet (bottom)
Icons as trailing elements in top app bar on mobile (top) and tablet (bottom)

You can place one button in the app bar on mobile and two on tablet. If there are more actions, the remaining are placed into the overflow.

Button as trailing element in top app bar on mobile (top) and tablet (bottom)
Button as trailing element in top app bar on mobile (top) and tablet (bottom)

Overflow

By clicking on the overflow icon, the overflow menu opens. The user can close the menu by clicking outside the menu. 

Animation of opening the overflow menu in the top app bar
Animation of opening the overflow menu in the top app bar

Adaptive Design

The top app bar uses 100% of the screen width and adapts to the width of the view or device. 

The container occupies 100% of the screen width on mobile (left) and tablet (right)
The container occupies 100% of the screen width on mobile (left) and tablet (right)

Variations

Small with Left-Aligned Title

The small top app bar with a left-aligned title is used for subpages that require back navigation or close/cancel and multiple actions. Avoid displaying the profile on a subpage.

 

Small with Centered Title

The small top app bar with centered title is used for the main/landing/home page in an app. It displays the app name, page headline, logo, and profile image.

 

Large with Left-Aligned Title

Collapsing layout is the initial state of the small top app bar before scrolling. It is used to emphasize the headline or to display a headline with a long text.  

Small bar with left-aligned title (left), with centered title (middle) and large bar with left-aligned title (right)
Small bar with left-aligned title (left), with centered title (middle) and large bar with left-aligned title (right)

Resources

Development: FioriTopAppBar, FioriToolbar

SAP Fiori for iOS: Navigation Bar

Material Design: Top App Bar

Related Components/Patterns: Buttons, Menus

Navigation Bar

The navigation bar provides fast access to two to five core destinations in an app. 

Navigation bar with three destinations
Navigation bar with three destinations

Usage

Do
  • Use the navigation bar for two to five core destinations. 
  • Use the navigation bar on mobile and small tablet interfaces.
  • Keep the title of destinations short and concise. 
Don't
  • Don’t use the navigation bar if there is only one destination or if there are more than five, use the navigation drawer instead. 
  • Don’t use the navigation bar on tablets, use the navigation rail or the standard navigation drawer instead. 
  • Don’t wrap, truncate or shrink text. 

Anatomy

A. Icon

Meaningful icons visualize the app destinations. Use filled icons for the selected destination and unfilled icons for unselected destinations.  

B. Active Indicator 

The active indicator highlights the selected destination.

C. Label Text

The label text provides a short and concise description of the destination.

D. Large Badge with Value (Optional)

The large badge with value shows a number for status changes.

E. Small Badge (Optional)

The small badge displays a change, for example, a new notification.

F. Container

The container contains all destinations including icons, active indicator, and optional labels. 

Navigation bar anatomy
Navigation bar anatomy

Behavior and Interaction

When the user taps on a destination or if one is focused on the navigation bar, the user is directed to the navigation destination associated with that icon. Navigation between destinations is visually highlighted by the active indicator and the filled icon. 

Selecting another destination in the navigation bar
Selecting another destination in the navigation bar

When scrolling up or down on the screen, the navigation bar remains fixed. 

Scrolling up and down while the navigation bar remains fixed
Scrolling up and down while the navigation bar remains fixed

Adaptive Design

Use navigation bars on mobile and small tablet interfaces. The navigation bar uses 100% of the screen width and the destinations are equally distributed across the navigation bar. 
 
On tablets, replace the navigation bars with a more appropriate component, such as a navigation rail or navigation drawer. 

Variations

There are different variations of destinations to represent the navigation bar:

  • Label and icon 
  • Icon only 
  • Label and icon for selected destinations and icon only for unselected destinations 

Label and Icon

The default navigation bar consists of a label and an icon.

Navigation bar destinations with label and icon
Navigation bar destinations with label and icon

Icon Only

For a simplified navigation bar, you can omit the labels. Icons should always be unique and universally represented for users (e.g., basket, home and favorites).

Navigation bar destinations with icon only
Navigation bar destinations with icon only

Mixed

The mixed variation is used to emphasize the selected destination with label and icon and the unselected destinations are displayed with icon only. Use this variation only when the icons have a clear meaning to users.

Navigation bar selected destination with label and icon and unselected destinations with icon only
Navigation bar selected destination with label and icon and unselected destinations with icon only

Resources

Development: FioriNavigationBar, BottomNavigationView

SAP Fiori for iOS: Tab Bar

Material Design: Navigation bar

List Card

The list card displays a set of items or objects in a vertical list format. Similar to the object card, the list card is also highly customizable. For increased organization, there are a few best practices on list item usage.

List cards on mobile (left) and tablet (right)
List cards on mobile (left) and tablet (right)

Usage

Do

Use the list card if you want to preview information from a set of related items or objects.

Don't

Don’t use the list card to highlight an individual item or object. Use the object card instead.

Anatomy

A. Header (Optional)

The header area supports a photo thumbnail or icon, and an overflow button for additional actions. A title is required when a header is used.

B. List Items

Similar to shortened object cells, list items can display a name, a subtitle, and a footnote, in addition to a photo thumbnail and inline actions. We recommend using the same format across list items per card and a maximum of five items. 

C. Footer (Optional)

In the footer area, users can access and perform select actions. We recommend a maximum of two actions.

Anatomy of a list card
Anatomy of a list card

Behavior and Interaction

Touch Targets

The touch target areas on the list card enable users to perform a variety of interactions across the header, the list items, and the footer.

List card touch target areas
List card touch target areas

Header Navigation

When a user taps on the header area of the list card, a page that shows the complete list of objects or items is opened.

Navigating from list card header to a full list page
Navigating from list card header to a full list page

List Item Navigation

Tapping a list item on the card opens to that specific item’s object details page.

Navigating from a list card item to individual object details page
Navigating from a list card item to individual object details page

Variations

The list card is designed to be flexible for accommodating different use cases. While flexible, we recommend keeping attributes consistent and concise among the card’s list item set.

List card variations: (list item) with tonal button, (list item) with icon buttons, and one list card without optional attributes
List card variations: (list item) with tonal button, (list item) with icon buttons, and one list card without optional attributes

Resources

Development: ListCard

SAP Fiori for iOS: List Card

Related Components/Patterns: Cards Overview, Object Cell

Object Card

The object card is a flexible container with critical information regarding a single object. It previews the object and serves as the entry point to the full object detail page. The object card is highly customizable to accommodate various content types and use cases.

Collections of object cards on mobile (left) and tablet (right)
Collections of object cards on mobile (left) and tablet (right)

Usage

Do
  • To keep the card content scannable, use concise text and include only high-priority information
  • Each object card is about one object. Content in one card is independent of other cards
  • Surface no more than two direct actions in the object card. Use the overflow button to access more actions
Don't
  • Don’t include very long information in the object card. Users can always drill down to view the full details
  • Don’t use cards if objects are homogeneous and can be more efficiently displayed in regular object cells

Anatomy

A. Image (Optional)

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

B. Title Area

The title area is used to place the main text content related to the object. The title area contains a title (required), a subtitle (optional), a footnote (optional), and attributes (optional) like statuses.

C. Overflow Button

The overflow button allows users to access additional actions on the card and/or the represented object via a menu.

D. Description (Optional)

The description is typically a long string of text than what is displayed in the header area to provide additional information.

E. Actions (Optional)

Object cards allow up to two buttons at the bottom of the card so the user can perform the actions without drilling down to object details. Only surface the most relevant or frequently used actions. Use the overflow button for additional or general actions.

Anatomy of object cards
Anatomy of object cards

Behavior and Interaction

Touch Targets

By default, the card area is one touch target. Within the card area, there could be two additional touch areas: the overflow button, and up to two action buttons.

Possible touch targets on an object card
Possible touch targets on an object card

Overflow Button

When the user taps on the overflow button, a menu<link to Menu> will pop up listing available actions the user can take. The options in the menu depend on the object type or user role.

 Tap on the overflow button opens the menu
Tap on the overflow button opens the menu

Action Buttons

When the user taps an action button at the bottom of the object card, said action will be performed directly, or a specific workflow will be triggered based on the app’s configuration.

 

Approve leave request from an object card
Approve leave request from an object card

Card Area

By default, tapping on the card area (outside the overflow button and action buttons) will navigate the user to the object’s detail page, where they can view additional information about the object.

Tap on the card area navigates to the detail page
Tap on the card area navigates to the detail page

Card Carousel

A group of object cards can be displayed in one row like a collection view. Users can scroll horizontally to view more cards or tap the “See All” button to view all cards in this group.

Horizontal scroll in card carousel
Horizontal scroll in card carousel

Variations

The content within the object card is designed to be flexible to support different use cases. Choose the most relevant content based on context and keep a consistent information hierarchy. Focus on information that could help the user take the immediate next step.

The examples below show some different object card contents.

 Object card variations (left to right): minimal content, full title area, full content with one action, and full content with two actions
Object card variations (left to right): minimal content, full title area, full content with one action, and full content with two actions

Adaptive Design

Like chart cards, the object cards on mobile follow a single column vertically stacked layout. The tablet displays a two or three-column grid layout.

The card carousel follows the same number of columns as the grid with adjusted card width, so an additional card is visible and cut off at the end. The slice of a card at the end indicates horizontal scrolling.

Object cards layout on mobile (left) and tablet (right)
Object cards layout on mobile (left) and tablet (right)

Resources

Development: ObjectCard

SAP Fiori for iOS: Object Card View

Related Components/Patterns: Cards Overview, Object Cell, Menus

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

Signature Form Cell

The signature form cell is an entry point for users to launch the signature capture component.

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

Usage

Do
  • Use the signature capture form cell when user consent is required.
  • Use a concise header to communicate the purpose and importance of the signature requirement.
  • Use an asterisk (*) next to the header to indicate that the signature is required.
Don't

Don’t use the signature capture form cell for insignificant or non-essential tasks.

Anatomy

A. Header

The header introduces the signature form cell.

B. Text Label

The text label describes what the signature is for.

C. Helper Text

The helper text provides additional information about the form cell. 

D. “Add Signature” Button

The “Add Signature” button launches the dialog for the signature capture when tapped.

Anatomy of the signature form cell
Anatomy of the signature form cell

Behavior and Interaction

The signature icon is the touch target for the form cell. When it is tapped, it navigates users to the signature capture.

Activating the signature form cell
Activating the signature form cell

Adaptive Design

The full width of the signature form cell adapts to different screen sizes.

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

Resources

Development: SignatureCaptureFormCell

Related Components/Patterns: Signature Capture, Button, Signature Capture Inline

Collection View

Collection view previews a sample of content and presents it in a highly visual layout. It is an alternative view of object cells. The information is displayed in a grid format instead of list with an emphasis on images.

Collection view of products on mobile (left), collection view of contacts on tablet (right)
Collection view of products on mobile (left), collection view of contacts on tablet (right)

Usage

Do
  • Use a collection view when you want to display data in a grid.
  • Use a collection view when the image is the preferred element to identify each item.
  • Use a collection view as an entry point to a full list of all the items or to a detailed view of each of those items.
Don't
  • Don’t use a collection view to display only text.
  • Don’t use a collection view if an image is not a good identifier of the item or the majority of items do not have images in the data set. Use object cells instead.
  • Don’t mix different types of objects in one collection view.

Anatomy

Basic Anatomy

A. Header (Mandatory)

At the top left of the collection view is the header, which describes what the content in the view represents.

B. Collection Cells

This area displays the cells in this collection view. Each collection cell represents one item. It can be an object or a person/account. Collection cells can be displayed in one row with horizontal scroll or in a multi-row grid.

C. Footer

The footer is placed below the collection cells with a See All button and a total number of items in that collection. Users can tap the See All button to view all of the items in this collection as a list of object cells. The footer is only used in a horizontal scroll collection view and is not available in a multi-row grid collection view.

Collection view anatomy
Collection view anatomy

Collection Cell Anatomy

A collection cell consists of a mix of image and text labels. The container (A) holds all content. The type of content displayed in each cell should be consistent within one collection view. The container height depends on the height of the elements being displayed. The container width is defined by the sizing rules based on screen size (see specifications for more detail).

An image (B) is required for a collection view. If the item does not have an image, use a placeholder image. See instructions for placeholder images in the placeholder image section.

The title (C), subtitle (D), and attribute (E) labels are optional and may be used to display additional information. All cells in one collection consist of the same type of texts, reserve the space when the value is empty. Though all texts are optional, we strongly recommend to always display names as a title for people or accounts.

Collection cell anatomy: contacts (top), products (bottom)
Collection cell anatomy: contacts (top), products (bottom)

Variations

Collection View with Horizontal Scoll

The horizontal scroll collection view displays collection cells in a single horizontal line. Users can scroll left and right to see items in this collection. It provides a preview of the collection without taking a lot of screen space. Users can use the See All button to view the complete collection in list view.

Horizontal scroll collection view sample
Horizontal scroll collection view sample

Collection View in Multi-Row Grid

The multi-row grid layout allows the collection cells to stack vertically. All items in the collection should be displayed, so a “See All” button is not used. Users can scroll vertically to view items in the page.

Collection view grid on mobile
Collection view grid on mobile

Behavior and Interaction

Horizontal Scroll

Users can scroll horizontally to view more cells. Upon scroll, the collection cell is cut off at both ends of the view. Due to the vast range of device sizes, the size of a collection cell is dynamic to ensure the cut off. A gradient is added to the edge to hint at there being more content.

Horizontal scroll behavior of collection cells
Horizontal scroll behavior of collection cells

When there are not enough items in the collection to scroll, left align the cells with 16dp paddings in between each cell.

To disable the horizontal scroll, display the first several items in a row in the same way horizontal scroll cells are positioned until there is not enough space for a full cell or there are no more items to be displayed.

Sample collection view of contacts on tablet
Sample collection view of contacts on tablet

Navigation

In the horizontal scroll collection view, the “See All” button shows the entire set of data which is displayed as a list of object cells.

Tapping
Tapping "See All" to view all collection view items in a list

In all types of collection views, tapping on a single collection cell will navigate to a detailed view of the item. The actual destination depends on the context and type of data represented by the cell. For example, a collection cell of a team member may open up an employee’s profile page.

Tap one collection cell to drill down
Tap one collection cell to drill down

Resources

Development: CollectionView

SAP Fiori for iOS: Collection View

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

Signature Form Cell

The signature form cell is an entry point for users to launch the signature capture component.   

Structure

A. Header

The header introduces the signature form cell.

B. Text Label

The text label displays information in relation to what the signature is for.

C. Icon 

The signature icon launches the dialog for the signature capture when tapped on.

Behavior & Interaction

The signature icon is the touch target for the form cell. When it is tapped, it will navigate users to the signature capture. 

Specs

Main Colors

Sample Element Alpha Hex
Background #FFFFFF
Header #6A6D70
Text label #32363A
Signature icon button #0A6ED1

Signature Form Cell

The signature form cell is an entry point for users to launch the signature capture component.   

Structure

A. Header

The header introduces the signature form cell.

B. Text Label

The text label displays information in relation to what the signature is for.

C. “Add Signature” Button

The “Add Signature” button launches the dialog for the signature capture when tapped on.

Behavior & Interaction

The signature icon is the touch target for the form cell. When it is tapped, it will navigate users to the signature capture. 

Specs

Main Colors

Sample Element Alpha Hex
Background #FFFFFF
Header #6A6D70
Text label #32363A
Signature icon button #0A6ED1

Signature Capture Inline

Signature capture inline is a variation of the signature capture component. This variation allows users to input their signature on a screen that is shared with other components.

Signature capture inline on mobile (left) and tablet (right)
Signature capture inline on mobile (left) and tablet (right)

Usage

Signature capture inline may be used when users need to view content on the screen along with the signature input area. This provides users with more context on what they are signing for.

Anatomy

Default State

A. Header

The header introduces the signature capture inline. It is the only part of the component that is not covered by the activation scrim.

B. Activation Scrim

The activation scrim is an overlay that is placed on top of the signature cell. When the scrim is present, the signature cell is deactivated, and the user cannot sign. The user must tap on the scrim to activate the signature cell.

C. Text Label 

The “Tap to Sign” text label provides a call-to-action for the user.

Anatomy of signature capture inline default state
Anatomy of signature capture inline default state

Active State

A. Header

The header introduces the signature capture inline.

B. “Cancel” Action Button

The “Cancel” action button allows for the user to exit the active signing area.

C. Signature Line

The signature line prompts the user to input their signature in the space given.

D. Action Button Footer 

The action button footer provides the user two action buttons for the signing process. The “Clear” button erases what the user has signed on the screen. The “Save” button saves what the user has signed on the screen. Pressing the “Save” button will trigger the view mode of the signature and the “Re-enter Signature” button to appear.

Anatomy of the signature capture inline in active state
Anatomy of the signature capture inline in active state

View Mode

A. Header

The header introduces the signature capture inline.

B. Saved Signature

Once the user saves, the signature becomes transparent to indicate the signing area is deactivated.

C. “Re-Enter Signature” Button  

The “Re-Enter Signature” button allows the user to reactivate the cell and input a new signature.

Anatomy of the signature capture inline in view state
Anatomy of the signature capture inline in view state

Behavior and Interaction

Activation Scrim

The activation scrim is a call-to-action for the user to input their signature. It also allows the user to scroll on the rest of the screen without accidentally signing in the signature capture inline cell. The “Tap to Sign” activation scrim appears only in the first instance where the signature capture inline cell has not been activated yet.

Activating the signature capture inline
Activating the signature capture inline

Re-Enter Signature  

The “Re-Enter Signature” button appears once the user has pressed the “Save” button to save their signature. If pressed, it will clear the saved signature, reactivate the cell, and allow the user to sign.

Re-entering a signature
Re-entering a signature

Resources

Development: SignatureCaptureFormCell

SAP Fiori for iOS: In-line Signature Form Cell

Related Components/Patterns: Signature Capture

Signature Capture Inline

Signature capture inline is a variation of the signature capture componentThis variation allows users to input their signature on a screen that is shared with other components.  

Usage

Signature capture inline may be used when users need to view content on the screen along with the signature input area. This provides users with more context on what they are signing for. 

Structure

Default State

A. Header

The header introduces the signature capture inline. It is the only part of the component that is not covered by the activation scrim.

B. Activation Scrim

The activation scrim is an overlay that is placed on top of the signature cell. When the scrim is present, the signature cell is deactivated and the user cannot signThe user must tap on the scrim to activate the signature cell.

C. Text Label 

The “Tap to Sign” text label provides a call-to-action for the user.

Active State

A. Header

The header introduces the signature capture inline.

B. Signature Line

The signature line prompts the user to input their signature in the space given.

C. Action Button Footer 

The action button footer provides the user two action buttons for the signing process. The “Clear” button erases what the user has signed on the screen. The “Save” button saves what the user has signed on the screen. Pressing the “Save” button will trigger the view mode of the signature and the “Re-enter Signature” button to appear. 

View Mode

A. Header

The header introduces the signature capture inline.

B. Saved Signature

Once the user saves, the signature becomes transparent to indicate the signing area is deactivated.

C. “Re-enter Signature” Button  

The “Re-enter Signature” button allows the user to reactivate the cell and input a new signature. See the interaction in the Behavior section.

Behavior & Interactions

Activation Scrim

The activation scrim is a calltoaction for the user to input their signature. It also allows the user to scroll on the rest of the screen without accidentally signing in the signature capture inline cellThe “Tap to Sign” activation scrim appears only in the first instance where the signature capture inline cell has not been activated yet.  

Re-enter Signature  

The “Re-enter Signature” button appears once the user has pressed on the “Save” button to save their signature. If pressed, it will clear the saved signature, reactivate the cell, and allow the user to sign. 

Specs

The signature capture inline is similar to a form cell and shares the screen with other components. On tablet, the signature capture inline fits within a responsive dialog.

Default State

Active State

View Mode

Default State

Sample Element Alpha Hex
Background #FFFFFF
Scrim #1A000000 or #000000 with 10% opacity

Active State

Sample Element Alpha Hex
Background #FFFFFF
Text #32363A
Header #6A6D70
Signature line #89919A
Signature #6A6D70
Text button text, contained button background #0A6ED1
Contained button text #FFFFFF

Saved State

Sample Element Alpha Hex
Background #FFFFFF
Header #6A6D70
Saved signature #666A6D70 or #6A6D70 at 40% opacity
Text button text #0A6ED1

Timeline View

The timeline view displays a list of items such as tasks, events, or meetings in chronological order. The information in the timeline view is presented as tappable cells that show the most important information about the object. The timeline view may be filtered or searched.

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

Usage

Do
  • Use the timeline cells to show a brief and concise overview of the object.
  • Use the timeline view to organize objects based on due date or time.
  • Use the timeline view to indicate the status of different objects.
Don't

Don’t show all the object’s details in the timeline cell. To view details, the user can tap to drill down into the cell’s details.

Anatomy

Timeline View

The timeline view contains a chronological axis with timestamps on the left and timeline cells to the right of the axis.

The timeline can be filtered and searched using the local search behavior. See Filter and Search for more details.

A. Header

The header shows the parent time unit (month, day, etc.) of the timeline cells with a customizable format.

B. Now Indicator

The now indicator indicates today’s timeline cell(s). It appears on top of the first cell with current tense or the cell with future tense that is closest to now.

C. Timeline Start / End Cells (Optional)

Differentiated by a diamond shaped node, a start or end node indicates the beginning or end of the timeline.

D. Timeline Cells

The timeline cells provide concise key information about timeline objects. These may be tappable to drill down into full details.

Timeline view anatomy
Timeline view anatomy

Timeline Cell

The timeline cell contains the title of the object along with other key information. Designed for flexibility, information may be hidden or formatted according to the user’s needs. These cells may also be made tappable to allow the user to navigate to the object details.

A. Timestamp Column

The timestamp column displays the timeline cell timestamp. The timestamp may have a flexible format. Underneath the timestamp, a non-interactive icon may be displayed to indicate more information upon drill down.

B. Node and Node Line

The nodes and node lines indicate the status and tense of the timeline view object by using color, shape, and icons. See variations below for details.

C. Timeline Title

The timeline title provides a concise overview of the timeline object. The timeline title may wrap to two lines before truncating.

D. Status Stack

The status stack provides 2 statuses of the timeline object.

E. Description

The description may wrap to three lines before truncating.

F. Attributes

The two attributes provide additional information about the timeline object. Attributes cannot exceed one line.

Timeline cell anatomy
Timeline cell anatomy



Behavior and Interaction

The navigation to a timeline view depends on the application’s information architecture and navigation paradigm.

Users can scroll through the timeline to view any number of objects in the past, present, or future. The header is fixed to help users keep track of their place on the timeline. Users may tap on a timeline cell to drill down into the object’s details on another page.

User taps on a timeline cell to navigate to full details
User taps on a timeline cell to navigate to full details

Variations

Through shape and color, timeline cell nodes and the node line indicate the state and status of timeline objects.

Past objects are indicated by a blue node and blue node line.

Current objects are indicated by a blue cell background, a blue node, and blue node line.

Future objects are indicated by a gray node and gray node line.

From top to bottom: past tense, current tense, and future tense
From top to bottom: past tense, current tense, and future tense

Icons within the node indicate whether an object is open, in-progress, or completed.

From top to bottom: start status, completed status, in-progress status, empty status, open status, and end status
From top to bottom: start status, completed status, in-progress status, empty status, open status, and end status

Adaptive Design

Mobile

Because of the smaller real estate on mobile, the titles, descriptions and supporting texts within the timeline cell may be truncated. The timeline view may also share the screen with another content type such as a map view. Therefore, the bottom sheet can be used to display the timeline view.

Timeline view (left) and timeline bottom sheet (right) on mobile
Timeline view (left) and timeline bottom sheet (right) on mobile

Tablet

The timeline view can fit on tablet in different ways. If the timeline is the only content on the screen, it will be center-aligned. However, if the timeline shares the screen with other content, a side sheet can be used to display the timeline.

Timeline view (left) and timeline side sheet (right) on tablet
Timeline view (left) and timeline side sheet (right) on tablet

Resources

Development: TimelineView

SAP Fiori for iOS: Timeline

Related Components/Patterns: Object Cell

Timeline Preview

The timeline preview gives users a brief glimpse of upcoming objects, events, or recent posts in chronological order using a horizontal timeline.

Timeline preview on mobile (left) and tablet (right)
Timeline preview on mobile (left) and tablet (right)

Usage

Do
  • Use the timeline preview component to display read-only objects and their respective timestamps.
  • Use the timeline preview as an overview and allow the user to navigate to the timeline view for details.
  • Use the timeline preview component to indicate the status of objects via the nodes and node lines.
Don't
  • Don’t use the timeline preview to show detailed or extended descriptions of objects.
  • Don’t use the timeline preview to show objects or tasks which require direct interactions with them.

Anatomy

A. Header 

The header provides an overview of the timeline preview.

B. Timeline Preview Object

A timeline preview object is a reduced representation of the timeline view objects. This includes reduced content such as the timestamp, node, and object title.

On mobile devices, the timeline preview displays two timeline preview objects.

On tablets, the timeline preview displays four timeline preview objects.

C. “See All” Button

See All (#)” indicates the total number of objects in the timeline view.

Timeline preview anatomy
Timeline preview anatomy

D. Timestamp

The timestamp displays the time or date of the timeline object. The format can be customized. If the object is current, the timestamp should indicate that the event is occurring “Today”.

E. Node and Node Line

The node and the node line indicate the status and the relative tense (past, current, or future) of the object.

F. Object Title

The object title provides the name of the object. The title should be succinct but may wrap up to two lines.

Timeline preview anatomy
Timeline preview anatomy

Behavior and Interaction

The nodes and node lines use color, shape, and icons to indicate the status and tense of the timeline preview object.

Start and end objects have diamond-shaped nodes. They are the first or the last object of the whole timeline preview project.

From left to right: A past event with start status, a future event with end status
From left to right: A past event with start status, a future event with end status

All other objects have circle-shaped nodes. For open status, the node is an open circle. For in-progress status, the node contains three ellipses. For completed objects, the node contains a checkmark.

To ensure flexibility, colors and node icons may be customized together according to the user’s needs.

From left to right: open status, in progress status, completed status
From left to right: open status, in progress status, completed status

Besides the shape-based node status, colors are used to indicate past, current, and future events.

From left to right: past tense, current tense, future tense; from top to bottom: start status, end status, open status, in progress status, complete status
From left to right: past tense, current tense, future tense; from top to bottom: start status, end status, open status, in progress status, complete status

The objects in the timeline preview are read-only, and tapping anywhere within the timeline preview navigates the user to the full timeline view.

Tapping in the timeline preview navigates to timeline view
Tapping in the timeline preview navigates to timeline view

Adaptive Design

On mobile devices, the timeline preview displays two objects.

On tablets, the timeline preview displays four objects.

Timeline preview on mobile (left) and tablet (right)
Timeline preview on mobile (left) and tablet (right)

Resources

Development: TimelinePreviewView

SAP Fiori for iOS: Timeline Preview

Related Components/Patterns: Object Cell

Filter Feedback Bar

The filter feedback bar is a horizontal scroll area containing interactive chips that provide users quick access to filter controls. The bar appears below the app bar and above the list of objects. The interactive chips in the filter feedback bar indicate which filters have been applied and what filters are available.

Filter feedback bar on a compact (left) and expanded screen (right)
Filter feedback bar on a compact (left) and expanded screen (right)

Usage

Do
  • Use the filter feedback bar to provide direct access to frequently used filters.
  • Use the filter feedback bar when filter options are relatively simple and straightforward.
  • Use the filter feedback bar when users want to modify applied filters often.
Don't
  • Don’t use the filter feedback bar if users require a large number of filters.
  • Don’t use the filter feedback bar if filter options are difficult to represent by chips, for example, when filter options have very complex names and structures.

Anatomy

The filter feedback bar sits between the app bar and content area.

Filter Feedback Bar

A. Active Filters

Active filters indicate the sort (if it is a non-default sort) and filters currently applied to the list. They are represented by chips in the selected state. The active filters are always on the left side of inactive filters, with sort (if applicable) at the very left.

B. Inactive Filters (For Fast Filters)

Inactive filters are available filter options that are not currently applied to the list. Only fast filters will be shown as inactive filters. They are represented by chips in the non-selected state.

C. Filter Counter Chip (Optional)

The filter counter chip is an optional chip that can be added after the user activates the filter chip. It should be placed in front of the first filter chip to display the total number of active items in the filter. Once the filter is applied, the total number of items in the list is returned.

Filter feedback bar anatomy
Filter feedback bar anatomy

Filter Chip

A. Container

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

B. Leading Icon (Optional)

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

C. Text

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

D. Trailing Icon (Optional)

A filter chip with a down arrow trailing icon indicates that an extended action is available. On mobile devices, the extended action is represented by a bottom sheet, while on tablet devices, it is represented by a dialog.

Filter chip anatomy
Filter chip anatomy

Behavior and Interaction

Horizontal Scroll

All filter options in the filter feedback bar are displayed in one row. Users can scroll horizontally to view all filters.

Horizontal scroll
Horizontal scroll

Applying Fast Filters

Users can apply a fast filter simply by tapping the chip. This will change the chip to the selected state and become an active filter. The active filter will move to the left of any inactive filters. Each time a fast filter is applied, the list below will be refreshed to show the filtered result.

Applying fast filters
Applying fast filters

Removing Fast Filters

Users can remove a fast filter simply by tapping the chip. This will change the chip to non-selected state and back to an inactive filter. The inactive filter will move back to its original position as the fast filter. Users can only remove one fast filter at a time, and the list below will be refreshed to show the updated result.

Removing fast filters
Removing fast filters

Applying Filters from the Filter Dialog

In the filter dialog, users can apply multiple filters at a time. All applied filters will be displayed in the feedback bar as active filters. An active chip from the filter dialog (no fast filter) will be added at the same position as it is in filter form.

In general, the active filters take the selected filter’s name or value directly. If the value or name is not clear enough, we recommend using both the label and value in the active filter. For example, a location value could represent arrival or departure, adding “Arr:” or “To:” and “Dep:” or “From:” to the location value would help users identify what the location stands for. By default, we recommend adding “Sort By:” to the sort value in the filter feedback bar for clarity.

Applying filters from the Filter dialog
Applying filters from the Filter dialog

Removing Filters from the Filter Dialog

Users can remove an applied filter from the filter dialog directly by tapping the chip in the filter feedback bar. If that option is not defined as a fast filter, it will disappear from the filter feedback bar. The user can also remove a filter by deselecting it in the filter dialog as the standard behavior of the filter dialog.

Removing applied filters from the Filter dialog
Removing applied filters from the Filter dialog

Variations

Wrapped View

A group of filter 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.

Filter feedback bar wrapped view
Filter feedback bar wrapped view

Filter Counter Chip

A filter counter chip is an optional chip that can be added after the user activates the filter chip. It should be placed in front of the first filter chip to display the total number of active items in the filter. Once the filter is applied, the total number of items in the list is returned.

Tapping on the filter counter chip navigates the user to the Sort and Filter page.

Active filter counter chip
Active filter counter chip

Selection View

A filter chip with a down arrow trailing icon indicates that an extended action is available. On compact screens, the selection view is represented by a bottom sheet or dialog, while on medium and expanded screens, it is represented by a dialog.

Selection view with bottom sheet (left) and dialog view (right)
Selection view with bottom sheet (left) and dialog view (right)

Fast Filters

Fast filters are pre-defined filter options that remain visible in the filter feedback bar even when they are not applied. With fast filters, users can apply filters to the list directly in the page instead of opening the filter dialog. The fast filter options are defined by the app team. To make fast filters most effective, we recommend only including the most frequently used filters as fast filters.

Filter Feedback Bar with Fast Filters

With fast filters, the filter feedback bar is visible by default with all fast filters as inactive filters. Users can apply fast filters directly or through the filter dialog. All applied filters will be shown in the filter feedback bar as active filters.

Filter Feedback Bar without Fast Filters

When no fast filters are defined, the filter feedback bar is hidden by default. The default sort does not show up in the filter feedback bar. After the user has applied a filter or changed the sort option through the filter dialog, the filter feedback bar will appear to show the active filters.

Adaptive Design

The selection view adapts to different screen sizes. On compact screens, the selection view appears as a bottom sheet or dialog. On medium and expanded screens, the selection view appears as a dialog. The other features remain the same on both device types.

Filter feedback bar selection view on a compact screen (left) and medium and expanded screen (right)
Filter feedback bar selection view on a compact screen (left) and medium and expanded screen (right)

Resources

Development: FilterFeedbackBar

SAP Fiori for iOS: Filter Feedback Bar

Signature Capture

The signature capture allows users to input their signature by signing directly on a dialog. The signature is captured and then saved with an optional watermark for additional information.

Signature capture on mobile (left) and tablet (right)
Signature capture on mobile (left) and tablet (right)

Usage

The signature capture may be used when users must sign to authorize workflows. It can be used in various cases, such as approving an order, confirming a task, or signing off for another person. The signature capture is always in a dialog. For signature capture nested with other components, use the signature capture inline.

Anatomy


A. App Bar

The app bar includes the title of what is being signed, a “Close” icon for users to exit the form cell, and a “Submit” button which is enabled once users sign.

B. “Submit” Button

The “Submit” button is disabled on the initial signature screen. It is enabled once users sign in to complete the signing process.

C. Signature Line

The signature line provides a space where the user can add their signature.

D. Divider Line

The divider line separates the signing screen from the footer.

E. Footer

The footer marks the bottom of the signature capture area and houses the “Clear” button.

F. “Clear” Button

The “Clear” button may be used if the user wants to erase what they have currently signed.

Anatomy of signature capture
Anatomy of signature capture

Watermark (Optional)

The signature capture supports an optional watermark which includes two lines of text and can be saved as a bitmap or SVG with the final signature once it is submitted. The text can include a timestamp, unique ID, or job title.

Signature capture watermark and timestamp
Signature capture watermark and timestamp

Resources

Development: Signature Form, SignatureCaptureFormCell

SAP Fiori for iOS: Signature Capture

Related Components/Patterns: Dialog, Signature Capture Form Cell, Signature Capture Inline

KPI Header

The KPI header displays a quick summary of KPI data to the user. It is typically used in an overview pattern to provide the user with contextual information at a glance

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

Anatomy

The KPI header is a container that includes multiple KPIs that are important to the user. KPIs in the KPI header are laid out horizontally with fixed padding. To maintain legibility, a limited number of KPIs may be displayed side-by-side in the KPI header depending on the device’s maximum width. 

A. App Bar

The app bar content varies depending on the architecture, but the KPI header must always have an app bar to allow users to navigate and identify the title of the screen.

B. KPI

The KPI metric is always the most prominent element of the KPI header component. See KPIs.

C. Pagination

If the content must use two or more slides, pagination is represented using dots to indicate the number of slides and is being displayed. The pagination dots are non-interactive and solely act as indicators. 

KPI anatomy
KPI anatomy
KPI progress view anatomy
KPI progress view anatomy

Adaptive Design

Mobile

On mobile, only up to two standard KPIs may appear in one slide together as long as they do not exceed the maximum width for the header area of the device. There may only be one KPI progress view per slide.  

KPIs on mobile
KPIs on mobile

Tablet

On tablet, only up to three standard KPIs or KPI progress views may appear in one slide together as long as they do not exceed the maximum width for the header area of the device.  

KPIs on tablet
KPIs on tablet

Resources

Development: KPI Headers

SAP Fiori for iOS: KPIs

Related Components/Patterns: KPIs

Banners

Banners show a short and concise message that displays at the top of the screen. It allows the user to take action or ignore it at any time. Apps may choose to use it for communicating internet connectivity, errors, synchronization statuses, or in-app notifications.

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

Usage

Do
  • Banners must remain on screen until dismissed by the user.
  • Only show one banner at a time.
  • Only use a text button for actions.
  • Optionally, you can add icons or images.
Don't
  • Don’t place more than two actions on a banner.
  • Don’t use more than three lines of text on mobile.
  • Don’t use more than two lines of text on tablet.

Anatomy

A. Icon or Image (Optional)

B. Text

The text can be one to three lines on mobile and one or two lines on tablet.

C. Buttons

A banner can provide up to two actions, which can be displayed as text button only.

Banner anatomy
Banner anatomy

Behavior and Interaction

Banners typically appear when a screen loads content and remain on screen until dismissed by the user.

Banner appearing and dismissing
Banner appearing and dismissing
Banner behavior with scrolling content
Banner behavior with scrolling content

Variations

One-Line Text

A. One-line text with one action
B. Icon or image and one-line text with two actions
C. One-line text with two actions
D. Error state one-line text
E. Error state one-line text with action

Banner with one-line text
Banner with one-line text

Two-Line Text

A. Two-line text with two actions
B. Icon or image and two-line text with two actions
C. Error state two-line text with action

Banner with two-line text
Banner with two-line text

Three-Line Text (Only for Mobile)

Three-line text with two actions (only for mobile)

Banner with three-line text (mobile only)
Banner with three-line text (mobile only)

Resources

Development: Banner Messages

SAP Fiori for iOS: Banners

Menus

A menu displays a list of relevant options for the user that can be triggered from a button.

Menu
Menu

Usage

A menu pops up when users interact with a button, an action, or another control. Menus allow users to select from a list of options.

Do

Use a menu when the number of actions exceeds the component’s action limit.

Don't
  • Don’t use a menu for a single action.
  • Don’t hide important actions.

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.

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

Variations

Menus display lists of related options (options may be grouped together with a divider) as well as unrelated options. They can contain a scrollbar and icons.

Menu with a Scrollbar

Menu with a selected item and a scrollbar
Menu with a selected item and a scrollbar

Menu With Icons

Menu with icons and a divider
Menu with icons and a divider

Resources

Development: DropdownMenu, ExposedDropdownMenu, DropdownMenu

Material Design: Menus

Hierarchy View

The hierarchy view is a set of columns that show the hierarchical relationships between objects. Typically, the hierarchy view shows a parent/child and sibling relationship but may also show more complex relationships that are several levels deep, such as a great-grandparent/great-grandchild.

Example of hierarchy view on mobile (left) and tablet (right)
Example of hierarchy view on mobile (left) and tablet (right)

Usage

Do

Use the hierarchy view if the user needs to see the relationship of an object, such as its parent, children, and sibling objects.

Don't
  • Do not use the hierarchy view for a single level of data. Instead, use a list of standard object cells.
  • Limit the content used in the hierarchy object cell. Due to the hierarchy accessory, space is limited.

Anatomy

The hierarchy view is organized into columns depending on how many levels are expanded and the kind of device that the user is using.

Mobile

A. Navigation Bar

The navigation bar is used only for the hierarchy view on small screens. It is used to navigate up and down the hierarchy levels. It would be used for the hierarchy view on mobile and hierarchy view in a dialog.

B. Object Cell

The hierarchy view cell is based on the object cell. The only difference is the additional hierarchy accessory. For more information,  see object cells.

C. Hierarchy Icon

The hierarchy icon allows users to view an object’s children. When selected, the icon toggles from a default state to a selected state. If there are no further children, the hierarchy accessory is empty.

D. Direct Objects Count

The direct objects count shows the total number of direct child objects. Displaying the direct objects count is optional.

Hierarchy view on mobile
Hierarchy view on mobile

Tablet

E. Object Cell

The hierarchy view cell is based on the object cell. The only difference is the additional hierarchy accessory. For more information, see object cells.

F. Overflow Preview

The overflow preview displays a hint of the parent and/or child level that is outside of the viewport. This is only available on large screen sizes.

G. Hierarchy Icon

The hierarchy icon allows users to view an object’s children. When selected, the icon toggles from a default state to a selected state. If there are no further children, the hierarchy accessory is empty.

H. Direct Objects Count

The direct objects count shows the total number of direct child objects. Displaying the direct objects count is optional.

Hierarchy view on tablet
Hierarchy view on tablet

Hierarchy List Picker

I. Navigation Bar

The navigation bar is used only for the hierarchy view on small screens. It is used to navigate up and down the hierarchy levels. Users can see the hierarchy view on mobile and hierarchy view in a dialog.

J. List Picker Form Cell

The list picker allows users to select options that have different hierarchy levels. Provide the hierarchy view cell with either radio buttons for single select or checkboxes for multi-select. For more information, see list picker form cells.

Hierarchy list picker on mobile
Hierarchy list picker on mobile

Behavior and Interaction

Hierarchy Accessory

Tapping on the hierarchy accessory leads the hierarchy view to access the selected object’s children. On tablet, it expands into another column. On mobile, the screen transitions to another view. If the user has navigated into more levels than the device can display, the view shifts to display the newest views and the highest ancestor level is out of view.

Expanding the hierarchy view
Expanding the hierarchy view

Horizontal Scroll

Swiping horizontally allows the user to navigate to see additional ancestor or child levels in the hierarchy.

Horizontally scrolling the hierarchy view
Horizontally scrolling the hierarchy view

Vertical Scroll

Scrolling up and down in a column allows the user to see the siblings within a hierarchy level.

Vertically scrolling the hierarchy view
Vertically scrolling the hierarchy view

Adaptive Design

The hierarchy view can accommodate several levels of content that is organized within columns.

One Column with Navigation Bar (Mobile Only)

One column hierarchy view with navigation bar, only available on mobile
One column hierarchy view with navigation bar, only available on mobile

Two Columns (Tablet Only)

Two columns hierarchy view, only available on tablet
Two columns hierarchy view, only available on tablet

Two Columns with Overflow Preview (Tablet Portrait Only)

Two columns hierarchy view with higher and lower columns visible as preview, only available on tablet portrait
Two columns hierarchy view with higher and lower columns visible as preview, only available on tablet portrait

Three Columns (Tablet Landscape Only)

Three columns hierarchy view, only available on tablet landscape
Three columns hierarchy view, only available on tablet landscape

Three Columns with Overflow Preview (Tablet Landscape Only)

Three columns hierarchy view with higher and lower columns visible as preview, only available on tablet landscape
Three columns hierarchy view with higher and lower columns visible as preview, only available on tablet landscape

Hierarchy List Picker (Mobile)

Hierarchy view as list picker on mobile
Hierarchy view as list picker on mobile

Hierarchy List Picker (Tablet)

Hierarchy view as list picker on tablet
Hierarchy view as list picker on tablet

Resources

Development: HierarchyView

SAP Fiori for iOS: Hierarchy View

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

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

Date & Time Picker Form Cell

The date and time picker form cell is used for selecting time-based data types.

Time picker form cells in compact (left) and expanded layouts (right)
Time picker form cells in compact (left) and expanded layouts (right)

Anatomy

Single Value Picker Form Cell

Single value picker form cells are used for selecting only a single value, which includes the date picker, range picker, time picker, and duration picker. A single dialog will be opened when these form cells are selected.

A. Label

The label describes the topic or the name of the picker. It may have an asterisk next to it to indicate that users need to select a value.

B. Value

The value shows the selected date, date range, time, or duration value of the picker.

C. Icon

Unique icons are shown for the different picker form cell types. These icons help the user quickly understand what value can be picked.

D. Helper Text

The helper text provides additional information about the form cell.

Anatomy of single value picker form cell
Anatomy of single value picker form cell

Date and Time Picker Form Cell

The date and time picker form cell allows users to open two dialogs: the date picker when the date value is selected and the time picker when the time value is selected.

A. Label

The label describes the topic or the name of the picker. It may have an asterisk next to it to indicate that users need to select a value.

B. Date Value

The date value shows the selected date. It can be tapped to open the date picker dialog.

C. Time Value

The time value shows the selected time. It can be tapped to open the time picker dialog.

D. Helper Text

The helper text provides additional information about the form cell.

Anatomy of date & time picker form cell
Anatomy of date & time picker form cell

Variations

Date Picker Form Cell

When this cell is used to define a specific date, users can tap on the cell to trigger the date picker dialog found in the date/time picker. Users then make their selection in the dialog. When they close the dialog, the value they selected is displayed in the form cell.

Date picker form cell
Date picker form cell

Date Range Picker Form Cell

When this cell is used to define a specific date range, users can tap on the cell to trigger the full-page range picker dialog found in the date/time picker. Users then make their selection in the dialog. When they close the dialog, the value they selected is displayed in the form cell.

Date range picker form cell
Date range picker form cell

Time Picker Form Cell

When this cell is used to define a specific time, users can tap on the cell to trigger the time picker dialog found in the date/time picker. Users then make their selection in the dialog. When they close the dialog, the value they selected is displayed in the form cell.

Time picker form cell
Time picker form cell

Date and Time Picker Form Cell

When this cell is used to define a specific date and time, users can tap on either the date value or the time value to open the associated dialogs found in the date/time picker. Users then make their selection in the dialog. When they close the dialog, the value they selected is displayed in the form cell.

Date and time picker form cell
Date and time picker form cell

Duration Picker Form Cell

When this cell is used to set a time duration, users can tap on the cell to trigger the time duration picker. Users then make their selection in the dialog. When users close the dialog, the value they selected will be shown in the cell.

Duration picker form cell
Duration picker form cell

Adaptive Design

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

Time picker form cells in compact (top) and expanded (bottom) layouts
Time picker form cells in compact (top) and expanded (bottom) layouts

Resources

Development: DateTimePickerFormCell, DurationPickerFormCell 

SAP Fiori for iOS: Pickers

Material Design: Date Pickers

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Bottom Sheet

Bottom sheets are containers with supplementary content that is located at the bottom of the screen.

Bottom sheet list view
Bottom sheet list view

Usage

Do
  • Use bottom sheets to show deep-linked content that supplements the screen’s primary UI region.
  • Use bottom sheets when representing actions in a list as opposed to menus or simple dialog.
  • Use bottom sheets when you need to allow for a wide variety of content and layouts.
  • Use bottom sheets when easy access is needed.
Don't
  • Don’t use bottom sheets for complex information.
  • Don’t use bottom sheets to notify a user to take action.

Anatomy

Modal Bottom Sheet – List View

Modal bottom sheets are alternatives to inline menus or simple dialogs on mobile, providing room for additional items, longer descriptions, and iconography. They must be dismissed to interact with the underlying content.

Bottom sheet list view anatomy
Bottom sheet list view anatomy

A. Header

B. List of Actions

C. Divider Line

User interaction with bottom sheet list view
User interaction with bottom sheet list view


Modal bottom sheet list view on mobile (left) and tablet (right)
Modal bottom sheet list view on mobile (left) and tablet (right)

Behavior and Interaction

Modal bottom sheets present a set of choices while blocking interaction with the rest of the screen. The modal bottom sheets have a default elevation of 16dp, which helps users focus on their available choices.

Adaptive Design

Modal bottom sheets are primarily used on mobile. However, there is also a bottom sheet solution on tablet.

Resources

Development: ButtomSheetScaffold, ModalButtomSheet, ModalButtomSheet

Material Design: Bottom Sheet

Menus

A menu displays a list of options on a temporary container.

Usage

A menu pops up when users interact with a button, action, or another control. Menus allow users to make a selection from a list of options.

Do’s

  • Use a menu when the number of actions exceeds the components action limit.

Don’ts

  • Do not use a menu for a single action.
  • Do not hide important actions.

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 button or performs a specific action.

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

Variations

Menus display lists of related options (options may be grouped together) as well as unrelated options.

Menu With a Scroll Bar

Menu With Icons

Maximum Width & Height

Max Width

The maximum width of a menu is 280dp. Please use multiples of 56dp.

Maximum Height

The maximum height of the menu should be at least one row less than the height of the app’s user interface.

Maximum width of the menu is 280dp on mobile.
Maximum width of the menu is 280dp on mobile.

Specs

Menu



Menu with Icons



Maximum Width Menu



Sample Element Alpha Hex
Container #ffffff
Text #32363A
Disabled text #80032363A or #32363A at 50% opacity
Dropdown icon #6A6D70
Divider #EEEEEF
Selected item #E5F0FA

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

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 

Data Table

Data table is a grid layout of labeled data in column(s) and row(s) showing numbers, text, and images.

Data tables are available in both mobile and tablet sizes. In mobile, a horizontal scrollable data table with a sticky header is available. Alternatively, the data table will be converted to a object cells by default in compact width if horizontal scrolling is disabled.

We currently only have read-only tables. 

Usage

Do 


  • Use data table when the users need to compare multiple sets of data across items in a large data set.
  • Use data table as a tool to query, consume, and navigate to specific data.
  • Use data table if there are at least two columns or more of data parameters.

Don’t 


  • Don’t use data tables when users don’t need to compare multiple attributes across items

Structure

A data table contains:

A. Header Rows are at the top of the list, for the labels of the columns. It’s recommended for the data table to have at least three columns.

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

Height and Padding

Height

Header row height is 40pt and the column header row height is 52ptMobile and tablet sizes are consistent. 

Text Alignment

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)

Dynamic Width Column

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


Maximum Width of a Column

  • If there are more than two columns, all columns will have a maximum width (including padding) of 50% of the screen width to not take up too much space of the screen. 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 data table is set to two line).  

Maximum Height of a Row

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

Behavior & Interactions

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 all available to allow for flexibility.