sap-icon:// protocol supports the use of icons in your application
based on the icon font concept, which uses an embedded font instead of a pixel
image.Compared to image-based icons, icon font is easily scalable and you can change the color and
apply various effects via CSS. SAPUI5 provides the
Icon control in the sap/ui/core/Icon module and a
set of predefined icons available in IconPool in the
sap/ui/core/IconPool module.
The icon font will not work if Web fonts are blocked for the user's operating system, for example, by the Blocking Untrusted Fonts feature in Microsoft Windows (see Block untrusted fonts in an enterprise in the Microsoft Windows IT Center).
In SAP Fiori app, you
should not use icons with active state to trigger actions, use icon-only buttons
(sap.m.button) instead.
To display your custom icons in all browsers that SAPUI5 supports, you need the
woff2 version of your icon file. To use your own icon font file in the Icon control, the font
file and the metadata for the icons in the font file need to be registered in the IconPool. You can register both of
them by calling the IconPool.registerFont with a config object which contains the following options:
fontFamily: Name of the font file without the font extension
fontURI: URI of the folder where the woff2 file is included. You can use the
sap.ui.require.toUrl function to resolve a folder path based on the resource path setting.
collectionName (optional): Collection name which can be used in the
sap-icon URI to reference the icons. If this is not
provided, the fontFamily is used as
collectionName.
metadata (optional): Object that contains the mapping of the icon name to the icon's hex code, for example { "code1":
"e011", "code2": "e012", "spike-arrest": "e013", "verify-api": "e014" }
metadataURI (optional): URI of a JSON file that contains the mapping of the icon name to the icon's hex code for every icon
in the icon file and the path configuration for theme-dependent icon fonts
lazy (optional): Metadata for the icons is not loaded until the first icon
from the icon set is used
If neither metadata nor metadataURI is provided, a
request is sent to fontURI/fontFamily.json to load
the metadata.
The sap.tnt library provides an extra icon set. The sap/tnt/themes/base/fonts folder contains the
SAP-icons-TNT.woff2 font file as well as the SAP-icons-TNT.json JSON file, which contains the
mapping of the icon name and the icon's hex code:
{
"technicalsystem": "e000",
"systemjava": "e001",
"systemabap": "e002",
"systemrecommendations": "e003",
"system": "e004",
"systemtrex": "e005",
"systemtracks": "e006",
"technicalinstance": "e008",
"technicalscenario": "e007",
"throughput-backlog": "e009",
...
}Since UI5 version 1.117, a config section can be defined, into which the path configuration for the
theme-dependent icon designs (e.g. Horizon theme) can be written. The key defines a regluar expression that
matches the theme name, and the value represents the font file location for the respective theme. If the
config property is defined, the mapping of the icons' names and hex codes must be defined under an
icons property as shown below.
Since UI5 version 1.117, the SAP-icons-TNT.json file contains the theme-dependent path configuration:
{
"config": {
"path": {
"^sap_horizon.*": "sap/tnt/themes/base/fonts/horizon"
}
},
"icons": {
"technicalsystem": "e000",
"systemjava": "e001",
"systemabap": "e002",
"systemrecommendations": "e003",
"system": "e004",
"systemtrex": "e005",
"systemtracks": "e006",
"technicalinstance": "e008",
"technicalscenario": "e007",
"throughput-backlog": "e009",
...
}
}The JSON file has the same name as the woff2 file, so it is not necessary to set metadataURI. To register the
icon in the IconPool, use the following code. Note that in the example the metadata is not loaded until one icon from
this icon set is used because lazy is set to true.
// "IconPool" required from module "sap/ui/core/IconPool"
IconPool.registerFont({
collectionName: "tnt",
fontFamily: "SAP-icons-TNT",
fontURI: sap.ui.require.toUrl("sap/tnt/themes/base/fonts"),
lazy: true
});To reference icons, you assign the icon URI to a control by setting
sURI for the control's corresponding property. To get the icon
URI, the following two options exist:
Call IconPool.getIconURI with the iconName property:
// "IconPool" required from module "sap/ui/core/IconPool"
var sURI = IconPool.getIconURI("accidental-leave"); //please change the parameter to the name of your desired iconIf you know the collection name and the icon name, write the icon URI directly in the following format:
sap-icon://[collection-name]/[icon-name]
You need the collection name only for custom icons. The URI for predefined icons does not need the collection name.
The following code snippet shows how the sap.m.Dialog control that already supported image URI
has been adapted to also support icon URI.
IconPool.createControlByURI returns an instance of
Icon if sURI is an icon URI. Otherwise, the
second parameter is called as a constructor method to create an instance. The
sURI is set for the src property of the
instance.
// "IconPool" required from module "sap/ui/core/IconPool"
// "Image" required from module "sap/m/Image"
// "Device" required from module "sap/ui/Device"
Dialog.prototype.setIcon = function(sURI){
this.setProperty("icon", sURI, true);
if (!Device.os.ios){
//icon is only shown in non iOS platform
if (this._iconImage) {
this._iconImage.setSrc(sURI);
} else {
this._iconImage = IconPool.createControlByURI({
src: sURI //src is mandatory
/* other properties can be put here, such as id, ...*/
}, Image);
}
}
return this;
};
If the img tag is rendered directly in the control, and not by creating an
image control, use the writeIcon method on
sap/ui/core/RenderManager. The writeIcon
method accepts a URI as the first parameter. Depending on this parameter, it renders
either an img or a span tag. The classes and
attributes defined in the second and third parameter are also added to the rendered
tag.
Font face is inserted into the style sheet dynamically when Icon or
writeIcon are used for the first time. If the special character
needs to be written into the CSS to show the icon in a control, call the
IconPool.insertFontFaceStyle function to insert the built in
font face in your CSS. This is shown in the following code snippet:
// "IconPool" required from module "sap/ui/core/IconPool"
IconPool.insertFontFaceStyle();
});If you render the icon span directly in your control, or use icon font in your CSS, you have the maximal freedom to style the Icon control.
If you use the icon by creating an instance of Icon within your control,
however, use the CSS class sapUiIcon to add a new style to the
icon. To avoid influencing the style of icons used elsewhere, wrap the icon CSS
class with your control's root DOM class.
You can consume the predefined SAP-icons icon font also in an environment where UI5 isn't available. An integration
could look like the following:
laptop icon has the hexadecimal unicode
xe027.<html>
<head>
<link
rel="stylesheet"
type="text/css"
href="https://ui5.sap.com/resources/sap/ui/core/themes/base/SAP-icons.css"
>
<style>
.laptop::before {
font-family: SAP-icons;
content: "\e027";
}
</style>
</head>
<body>
<span class="laptop"></span>
</body>
</html>