布局类组件介绍

DeviceOne平台包含2个基础的布局组件,do_ALayoutdo_Linearlayout。所谓布局组件就是在IDE里设计界面,可以拖拽别的组件加到这个布局组件里作为这个布局组件内的一个部分。

注意:do_ScrollView也算是布局,也可以往里面拖拽其他组件,不过它比较特殊,它有且只有一个子节点。我们这里暂时不讨论。

do_ALayout组件

这个是最基础最常用的布局组件,这里的 ALayoutAbsoluteLayout的缩写,表示绝对布局。绝对布局使用很简单,它内部的所有组件的布局都是绝对坐标值,不过这个坐标值是相对ALayout来说的,不是相对整个屏幕。
如下图,按钮的x,y坐标都是100,是相对于按钮所在的ALayout的左上角。

这个组件的API可以参考这里.我们重点的介绍几个重要的特性:

  1. do_ALayout可以设置背景图片,这个功能比较常见,就是设置bgImage属性。
  2. do_ALayout支持touch,touchDown,touchUp事件,这里有一个技巧就是,在do_ALayout上添加一个do_Imageview, 如果在imageview上添加点击事件,用户手指必须点中图片才能激活,但是如果把事件加到imageview所在的ALayout,那么可点击区域就很大了,用户体验会好很多。
    如下图,上面的touch事件加在iamgeview上,手指会很难点中。示例代码下载参考这里
  3. 属性isStretchlayoutAlign,这二个属性很重要,涉及到屏幕适配的一个方式,解决在不同的手机屏幕宽高比不一样导致的变形问题。更详细的说明参考这里
  4. add方法,do_ALayoutdo_LinearLayout都具有这个方法,原理也一样。add这个方法也非常重要,通过这个方法可以在app运行是动态增加ui。应用的场景就是一些ui可以重复使用,比如一个app中所有的页面的header都是类似的,可以通过add动态添加,然后更新数据。更大的好处是能把这个add进去的ui对应的逻辑代码写在这个ui对应的js文件里。可以降低代码的耦合度。
    参考这个示例,主要代码如:
var nf = sm("do_Notification");
var page = sm("do_Page");
var layout = ui("ALayout_1");
// 把header.ui的根节点(是一个id为root的ALayout)加到当前index.ui的0,0位置
// 并且重新给它命名一个新的唯一标示id "header_id", 这个id不要和index.ui里已有的ui组件的id重复
var addedheader = layout.add("header_id", "source://view/header.ui", 0, 0);
// 获取header.ui的根节点对象(是一个id为root的ALayout),但是我们不能通过
// var header = ui("root");来获取这个对象,因为root这个id的作用域是在header.ui,而不是在index.ui.js
// 正确的写法是有2种,第一是:
var header1 = ui("header_id");
// 第二是:
var header2 = ui(addedheader);
// 判断这二个对象是否相同,可以通过getAddress方法
nf.toast(header1.getAddress() == header2.getAddress());
// 进一步我们还可以获取到header.ui根节点之下的子节点,比如statusbar是header.ui最上面的一部分组件的id
var statusbar = ui(addedheader + ".statusbar");
statusbar.bgColor = "FF0000FF";
// 我们并不推荐在index.ui里直接获取header.ui 的子对象,这不符合降低耦合度的原则
// index.ui不能直接调用header.ui里的函数,因为它们处于不同的js运行环境
// 要实现这二者之间的数据交换,可以通过二种方式
// 第一:通过数据bind,在header.ui.js里setmapping,然后通过binddata给header赋值
var hashdata = mm("do_HashData");
header1.bindData(hashdata);
hashdata.addData({
    "title_value" : "我是首页",
    "menu_bg_value" : "FF0000FF"
})
header1.refreshData();
// 第二:通过消息机制,订阅和触发消息都在page对象,因为header.ui和index.ui在同一page下
page.on("click_menu", function(data) {
    nf.alert(data);
})

do_LinearLayout组件

LinearLayout组件叫线性布局,意思就是里面的组件按线性排列,可以上下,可以左右排列。里面所有的子view的x,y没有意义,因为它们是一个接一个,无缝的拼接在一起。
这个组件的API可以参考这里.
我们重点的介绍几个重要的特性:

    1. LinearLayout很少设置固定的高度和宽度,它最大的优势是可以动态根据内容来变化width和height,自适应大小,强制性地使视图扩展以便显示其全部内容,也就是WRAP_CONTENT。Do平台有不少组件支持这种方式,参考文档.
      具体就是设置LinearLayout的width或height为-1表示自适应。那么LinearLayout显示的真实高度和宽度就是由它里面的所有子view叠加起来的。
    2. padding和margin属性,其实margin是所有ui都具有的公共属性,但是它只能在Linearlayout里有效,所以在这里一起提一下。
      padding就是在LinearLayout的内边距,margin就是LinearLayout里的一个子view和相邻的组件的距离,比如:
    3. add方法,LinearLayout 原理和do_ALayout完全一样,只不过就是参数x,y改成一个id值,表示加到现有一个组件的后面或下面。
      参考这个示例
时间: 2024-11-08 03:07:57

布局类组件介绍的相关文章

Flutter 布局类组件:流式布局(Wrap和Flow)

前言 把超出屏幕显示范围会自动折行的布局称为流式布局.Flutter中通过Wrap和Flow来支持流式布局,将Row换成Wrap后溢出部分则会自动折行. Wrap 接口描述 Wrap({ Key key, this.direction = Axis.horizontal, this.alignment = WrapAlignment.start, // 主轴方向子widget的间距 this.spacing = 0.0, // 纵轴方向的对齐方式 this.runAlignment = Wrap

Flutter 布局类组件

Column 类似Android里的LinearLayout里的Vertical 竖直布局 Row 类似 Android里的LinearLayout里的horizontal 水平布局 Flex 自适应布局,可以使用flex属性 规定子布局所占比大小,也可用direction规定方向 还有流式布局Warp,可以在子控件超出屏幕范围后自动换行,而Row是不可以的 Stack于Android中的FrameLayout类似,后置入的子控件将会显示在最上面 Center 居中显示布局,内部子控件会居中显示

ExtJS 4.2 组件介绍

目录 1. 介绍 1.1 说明 1.2 组件分类 1.3 组件名称 1.4 组件结构 2. 组件的创建方式 2.1 Ext.create()创建 2.2 xtype创建 1. 介绍 1.1 说明 ExtJS的强大功能之一是提供了非常丰富的组件,包括grid(表格).panel(面板).form(表单).button(按钮).progressBar(进度条)等等. 一个的ExtJS 4应用程序的UI界面,就是由一个或多个组件组成. 这里将会介绍组件的分类.名称.结构以及创建方式. 1.2 组件分类

关于Android四大基本组件介绍与生命周期(转)

Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity : 应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应. Activity之间通过Intent进行通信.在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据. 典型的动作类型有

【ALearning】第五章 Android相关组件介绍(一)Activity

Android应用程序由一些零散的有联系的组件组成,通过一个工程manifest绑定在一起.在manifest中,描述了每一个组件以及组件的作用,其中有6个组件,它们是Android应用程序的基石. Activities(活动) Service(服务) Content Provider(内容提供者) Intent(意图) Broadcast Receiver(广播接收器) Notification(通知) 在这里我们提到了组件(Component)的概念,组件(Component)是对数据和方法

cocos2d-x 源码分析 : control 源码分析 ( 控制类组件 controlButton)

源码版本来自3.1rc 转载请注明 cocos2d-x源码分析总目录 http://blog.csdn.net/u011225840/article/details/31743129 1.继承结构 control的设计整体感觉挺美的,在父类control定义了整个控制事件的基础以及管理,虽然其继承了Layer,但其本身和UI组件的实现并没有关联.在子类(controlButton,controlSwitch,controlStepper等中实现不同的UI组件).下面通过源码来分析control与

RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍

RDIFramework.NET ━ .NET快速信息化系统开发框架 工作流程组件介绍 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案. 1.RDIFramework.NET框架介绍 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,为企业或个人在.NET环境下快速开发系统提供了强大的支持,开发人员不需要开发系统的基础功能和公共模块,框架自身提供了强大的函数库和开发包,开发人员只须集中精力专注于业

背水一战 Windows 10 (38) - 控件(布局类): Panel, Canvas, RelativePanel, StackPanel, Grid

原文:背水一战 Windows 10 (38) - 控件(布局类): Panel, Canvas, RelativePanel, StackPanel, Grid [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(布局类) Panel Canvas RelativePanel StackPanel Grid 示例1.Panel(基类) 的示例Controls/LayoutControl/PanelDemo.xaml <Page x:Class="Window

Android开发1:基本UI界面设计——布局和组件

前言 啦啦啦~本学期要开始学习Android开发啦~ 博主在开始学习前是完完全全的小白,只有在平时完成老师要求的实验的过程中一步一步学习~从此篇博文起,博主将开始发布Android开发有关的博文,希望能在学习中和各位共同探讨,一起交流,共同进步~ 话不多说,首先进入我们的正题~Android开发一基本UI界面设计——布局和组件(Android Studio的配置安装使用等在以后为各位补上~) 基础知识 Android的组件分为布局和控件.布局,就是让控件在里面按一定的次序排列好的一种组件,本身并