Search code examples
font-awesomesapui5glyphicons

How to display glyphicon/font-awesome in sap.ui.core.Icon?


As the collection of icons is pretty limited in SAPUI5/OpenUI5 I would like to display glyphicons and / or font-awesome icons in a sap.ui.core.Icon.

How can this be achieved?


Solution

  • Inorder to use an external icon within an existing control, you could use the sap.ui.core.IconPool control. The control provides a addIcon method for adding an Icon.

    1. List item

      Declare the font-face tag in your CSS

      font-face {
        font-family: 'My-Icons'; 
        src: url('_PATH_TO_EOT_FILE_');
        src: url('_PATH_TO_EOT_FILE_?#iefix') format('embedded-opentype'), /*?#iefix is required to be added to the end of the path of eot file here*/
           url('_PATH_TO_TTF_FILE_') format('truetype');
        font-weight: normal;
        font-style: normal;
      };
      

      Incase if you are using font-awesome, you could include the font-awesome styleshet in you manifest. The stylesheet will be included in the font-face declarations among other things, somewhat like this:

      @font-face {
       font-family: 'FontAwesome';
       src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
       src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
       font-weight: normal;
       font-style: normal;
      }
      
    2. Call sap.ui.core.IconPool.addIcon to add you Icon. You could declare this in you Component.js

      sap.ui.define([
        "sap/ui/core/UIComponent",
        "sap/ui/core/IconPool"],
       function(UIComponent, IconPool){
        "use strict";
       return UIComponent.extend("com.sap.app.Component",{
       metadata : {
          manifest: "json"
       },
       init : function(){
          //call the init function of the parent
          UIComponent.prototype.init.apply(this, arguments);
          //Init Router
          this.getRouter().initialize();
      
          IconPool.addIcon("battery", "fa", {
              fontFamily : "FontAwesome",
              content : "f241" 
          });
        }
       }); 
      });
      
    3. You can now use this Icon in you control

      <mvc:View controllerName="com.sap.app.controller.App" 
        xmlns:mvc="sap.ui.core.mvc" 
        xmlns:core="sap.ui.core" 
        xmlns="sap.m">
        <core:Icon src="sap-icon://fa/battery" color="#031E48" ></core:Icon>
        <Button icon="sap-icon://fa/battery" press="onPress"></Button>
      </mvc:View>
      

    You can also refer to the documentation here : https://help.sap.com/saphelp_uiaddon10/helpdata/en/21/ea0ea94614480d9a910b2e93431291/content.htm