在本演练教程的这一步中,我们将根据用户的设备调整内容密度。SAPUI5包含不同的内容密度,允许您为支持触摸的设备显示更大的控件,为鼠标操作的设备显示更小、更紧凑的设计。在我们的app中,我们将检测设备并相应地调整密度。

Preview

 

The content density is compact on desktop devices and cozy on touch-enabled devices

Coding

You can view and download all files at Walkthrough - Step 37.

 

webapp/Component.js

...
               init: function () {
...            },
...
               getContentDensityClass :function(){
                       if(!this._sContentDensityClass){
                               if(!sap.ui.Device.support.touch){
                                      this._sContentDensityClass ="sapUiSizeCompact";
                               }else{
                                      this._sContentDensityClass ="sapUiSizeCozy";
                               }
                       }
                       returnthis._sContentDensityClass;
               }
 
        });
});

为了准备内容密度特性,我们还将添加一个助手方法getContentDensityClass。SAPUI5控件可以以多种尺寸显示,例如,为桌面和非触控设备优化的紧凑尺寸,在一个舒适的模式,是优化触摸互动。控件在应用程序的HTML结构中查找特定的CSS类,以调整其大小。 

这个助手方法查询sap.ui。设备API直接用于客户端的触摸支持,如果不支持触摸交互,则返回CSS类sapUiSizeCompact,其他所有情况下都返回sapUiSizeCozy。我们将在整个应用程序编码中使用它来设置适当的内容密度CSS类。

 

webapp/controller/App.controller.js

sap.ui.define([
        "sap/ui/core/mvc/Controller"
], function (Controller) {
        "use strict";
 
        return Controller.extend("sap.ui.demo.walkthrough.controller.App", {
 
               onInit:function(){
                       this.getView().addStyleClass(this.getOwnerComponent().getContentDensityClass());
               },
               onOpenDialog: function () {
                       this.getOwnerComponent().openHelloDialog();
               }
        });
});

 


webapp/controller/HelloDialog.js我们在app控制器上添加onInit方法,该方法在实例化app视图时调用。在这里,我们查询在app组件上定义的helper函数,以在app视图上设置相应的样式类,app视图中的所有控件现在将自动调整到样式定义的紧凑或舒适的大小。

sap.ui.define([
   "sap/ui/base/ManagedObject"
], function (ManagedObject) {
   "use strict";
 
   return ManagedObject.extend("sap.ui.demo.walkthrough.controller.HelloDialog", {
 
      constructor : function (oView) {
         this._oView = oView;
      },
 
        exit : function () {
                   delete this._oView;
        },
 
      open : function () {
         var oView = this._oView;
         var oDialog = oView.byId("helloDialog");
 
         // create dialog lazily
         if (!oDialog) {
            var oFragmentController = {
               onCloseDialog : function () {
                  oDialog.close();
               }
            };
            // create dialog via fragment factory
            oDialog = sap.ui.xmlfragment(oView.getId(), "sap.ui.demo.walkthrough.view.HelloDialog", oFragmentController);
            // connect dialog to the root view of this component (models, lifecycle)
            oView.addDependent(oDialog);
            // forward compact/cozy style into dialog
            jQuery.sap.syncStyleClass(oView.getController().getOwnerComponent().getContentDensityClass(), oView, oDialog);
         }
         oDialog.open();
      }
   });
 
});

“Hello World”对话框不是app view的一部分,而是在DOM中一个叫做“static area”的特殊部分打开的。对话框不知道在app视图中定义的content density类,所以我们手动将app的style类与对话框同步。 

 

webapp/manifest.json

...
  "sap.ui5": {
    ...     
    "dependencies": {
      ...
    },
    "contentDensities":{
      "compact":true,
      "cozy":true
    }
  }

在sap.ui5命名空间的contentden密度部分,我们指定了应用程序支持的模式。像SAP Fiori launchpad这样的容器允许基于这些设置切换内容密度。

由于我们刚刚根据设备功能启用了应用程序在这两种模式下运行,所以我们可以在应用程序描述符中将这两种模式设置为true。

这是最后一步,您已经成功地完成了演练!

 

Summary

您现在应该熟悉SAPUI5的主要开发范式和概念,并创建了一个非常简单的第一个应用程序。

如果您想更深入地研究特定主题,可以使用其他教程,这些教程更详细地展示了本演练的一些方面和高级主题。

 


Parent topic: Walkthrough

Previous: Step 36: Device Adaptation

Next: Step 38: Accessibility

Related Information

Content Densities

API Reference: sap.ui.Device.media.RANGESETS

API Reference: sap.ui.Device

API Reference: jQuery.sap.syncStyleClass

posted on 2018-12-11 17:50  ricoo  阅读(470)  评论(0编辑  收藏  举报