Chinaunix首页 | 论坛 | 博客
  • 博客访问: 61408
  • 博文数量: 20
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 190
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-12 09:53
文章分类

全部博文(20)

文章存档

2014年(20)

我的朋友

分类: LINUX

2014-07-11 11:21:29


1 前言
  1.1 目的
  1.2 范围
  1.3 参考文档
  1.4 缩写词和条目
2 概述
  2.1 参考代码
    2.1.1 源代码
    2.1.2 参考C++应用程序代码
  2.2 获得Control Panel服务框架
    2.2.1 Control Panel服务组件
  2.3 构建受控端  
3 实现受控端
  3.1 初始化AllJoyn框架
    3.1.1 创建总线附件
  3.2 启动AboutService在服务器模式
    3.2.1 创建属性仓库和填充需要的值
    3.2.2 执行总线倾听器和会话端口倾听器
    3.2.3 实例总线倾听器和初始化About功能
  3.3 初始化Control Panel服务和受控端
  3.4 发送通告
  3.5 创建头文件声明具体设备回调函数
    3.5.1 GetCode属性的回调信号
    3.5.2 SetCode属性的回调
    3.5.3 远程调用的回调
  3.6 创建UI的XML定义
    3.6.1 命名规则
    3.6.2 使用XML模式创建controlPanel设备标签
    3.6.3 定义单元名字在名字标签
    3.6.4 添加包含具体设备回调函数的声明在头文件
    2.6.5 定义控制面板的语言设置
    3.6.6 建立contorl panel结构
    3.6.7 定义一个根容器和它的子项目
  3.7 运行代码生成器工具
  3.8 编译代码
4 XML UI元素概述
  4.1 容器
    4.1.1 容器XML例子
    4.1.2 容器内容
  4.2 动作
    4.2.1 动作XML例子
    4.2.2 动作内容
  4.3 标签属性
    4.3.1 标签属性XML例子
    4.3.2 标签属性内容
  4.4 属性
    4.4.1 字符串属性例子
    4.4.2 字符串属性内容
    4.4.3 布尔值属性例子
    4.4.4 布尔值属性内容
    4.4.5 日期属性例子
    4.4.6 日期串属性内容
    4.4.7 时间串属性例子
    4.4.8 时间串属性内容
    4.4.9 标量属性例子
    4.4.10 标量属性内容
  4.5 对话
    4.5.1 对话XML例子
    4.5.2 对话内容


1 前言
1.1 目的
本文档说明如何使用AllJoyn框架ControlPanel参考代码实现ControlPanel服务框架受控端应用程序。
 
1.2 范围
本文档适用于软件工程师和假定你已经精通AllJoyn SDK。

1.3 参考文档
以下参考文档基于AllSeen联盟网页Docs/Downloads章节:
■ Introduction to AllJoyn
■ AllJoyn Control Panel Service Framework 1.0 Interface Specification
■ Getting Started with the AllJoyn Service Framework for Linux (C++)
■ Best Practices for the AllJoyn Control Panel Service Framework 1.0

1.4 缩写词和条目
术语                  定义
-----------------------------------------------
AllJoyn device        支持AllJoyn框架,能连接到
                      私人网络的设备
-----------------------------------------------
Control panel          允许用户与设备交互的部件集合。
                      一个Control Panel被受控者定义和发布,
                      被控制器发现和显示。一个设备
                      能有多个,能被定义在预语言基础上。
-----------------------------------------------
Controllee            一个AllJoyn应用程序,发布
                      Control Panel接口,所以其他AllJoyn
                      设备可以控制它。
-----------------------------------------------
Controller            一个AllJoyn应用程序控制另一个
                      发布Control Panel接口的AllJoyn设备
-----------------------------------------------
Device-specific       原始设备制造商提供的具体受控端
callbacks              代码,它处理控制端的设置属性值/
                      获得属性值/执行动作的请求。
                      此外,它能在控制端调用ControlPanel
                      服务框架适当功能时发起一个恢复
-----------------------------------------------
Widget                一个UI元素在Control Panel代表一个接口。
                      它生动地表现一个用户执行功能或使用内容。
-----------------------------------------------


2 概述
2.1 参考代码
参考代码包含两个ControlPanel应用程序例子。
一个仅仅模仿受控端,另一个使用生产者通知结合的受控端。

2.1.1 源代码
构建受控端必需的套件:
----------------------------------------------------
软件包                  描述
----------------------------------------------------
Alljoyn                  AllJoyn标准客服端代码
----------------------------------------------------
AboutService            About功能代码
----------------------------------------------------
ControlPanelService      Control Panel服务框架代码
----------------------------------------------------
Services Common          AllJoyn服务框架通用代码
----------------------------------------------------
Sample Apps              AllJoyn服务框架实例应用通用代码
----------------------------------------------------


构建使用通知生产者受控端的套件:
----------------------------------------------------
软件包                  描述
----------------------------------------------------
Alljoyn                  AllJoyn标准客服端代码
----------------------------------------------------
AboutService             About功能代码
----------------------------------------------------
ControlPanelService      Control Panel服务框架代码
----------------------------------------------------
NotificationService      通知服务框架代码
----------------------------------------------------
Services Common          AllJoyn服务框架通用代码
----------------------------------------------------
Sample Apps              AllJoyn服务框架实例应用通用代码
----------------------------------------------------

2.1.2 参考C++应用程序代码
----------------------------------------------------
应用程序                描述
----------------------------------------------------
ControPanelBrowser      一个查看ControlPanels的基础应用程序
----------------------------------------------------

2.2 获得Control Panel服务框架
参考基于Linux(C++)的AllJoyn服务框架文档的说明编译ControlPanel服务框架。
ControlPanel服务是由服务组件所组成。

2.2.1 Control Panel服务组件
以下子章节定义的这些组件涉及控制端和受控端之间交互。
这是服务层,没有任何具体的应用程序代码。

表4 定义部件模块内容,它们在ControlPanel服务组件用于创造一个ControlPanel。
表4 部件模块
----------------------------------------------------
模块                    描述
----------------------------------------------------
Container                UI元素集装箱
                        允许包含一群部件
                        至少包含一个子元素
----------------------------------------------------
Label                    UI元素,只读的文本标签
----------------------------------------------------
Action                  UI元素,代表受控端任意一个执行
                        代码的按钮,或执行打开一个对话部件
                        前的确认
----------------------------------------------------
Dialog                  UI对话元素
                        有一个对话消息和多于三个选择的按钮
----------------------------------------------------
Property                UI元素可以显示一个值,可以编辑它
----------------------------------------------------

2.2.1.1 Control Panel提供的组件
该组件包含特定的代码于设备,在受控端应用程序上运行。Control Panel生成的代码将与该组件交互,做到以下几点:
■ 设置属性值
■ 获得属性值
■ 执行动作
另外它可以启动刷新在控制器调用控制面板服务框架的相应功能。该组件的模块是由第三方提供。
举例,想象一台洗衣机。Control Panel提供组件将被编码成于硬件交流去执行动作比如设置水温或开始循环清洗。

2.2.1.2 Control Panel生成器组件
一个生成工具,接受一个XML UI定义文件,包含描述特定受控端的Control Panel的部件和它们的属性,生成代码到
Control Panel生成的代码中。如何生成代码的步骤,请参见“3.7 运行代码生成器工具”。

2.2.1.3 Control Panel例子组件
这个组件是一个应用程序的模板,这个受控端应用包含初始化和关闭的可靠的普通流程。
它依赖生成器组件和提供组件。

2.3 构建受控端
在上层执行以下规定构建受控端。
〉创建AllJoyn应用程序的基础部分;
〉实现属性仓库,在AboutService的服务模式中使用它(参见AllJoyn About功能用户手册(C++) 操作);
〉创建控制设备必需的处理代码,包含获取/设置属性和执行动作的处理函数;
〉创建UI的XML定义。包括在适当的地方对代码的调用处理程序;
〉使用SDK提供的代码生成工具从XML生成代码;
〉初始化Control Panel服务和受控端,发送通告广播有效的controlpanels。


3 实现受控端
3.1 初始化AllJoyn框架
参见基于Linux的AllJoyn服务框架(C++)文档的指示,建立AllJoyn框架。

3.1.1 创建总线附件
  BusAttachment* bus = CommonSampleUtil::prepareBusAttachment();
 
3.2 启动AboutService在服务器模式
Control Panel服务框架依赖About功能。
关于About功能更多的信息,参见AllJoyn About功能用户手册。

3.2.1 创建属性仓库和填充需要的值
  propertyStore = new AboutPropertyStoreImpl();;
  propertyStore->setDeviceId(deviceId);
  propertyStore->setDeviceName(deviceName);
  propertyStore->setAppId(appIdHex);
  propertyStore->setAppName(appName);
  std::vector languages(3);
  languages[0] = "en";
  languages[1] = "sp";
  languages[2] = "fr";
  propertyStore->setSupportedLangs(languages);
  propertyStore->setDefaultLang(defaultLanguage);

3.2.2 执行总线倾听器和会话端口倾听器
为了绑定一个会话端口和接收会话,必须创建一个继承于AllJoyn的BusListener和SessionPortListener类的新类。
这个类必须包含以下函数:
  bool AcceptSessionJoiner(SessionPort sessionPort, const char* joiner,const SessionOpts& opts)
AcceptSessionJoiner函数接收到加入会话请求时被调用;这个倾听器需要知道是否加入会话请求被接收或拒绝通过返回true/false。
具体应用程序的注意事项包含如下:
■会议端口请求了
■具体会议选项的局限性
■会话已经加入的数量
这里有一个完整的listener类定义的例子:
  class CommonBusListener : public ajn::BusListener, public ajn::SessionPortListener
  {
    public:
      CommonBusListener();
      ~CommonBusListener();
      bool AcceptSessionJoiner(ajn::SessionPort sessionPort, const char* joiner,
      const ajn::SessionOpts& opts);
      void setSessionPort(ajn::SessionPort sessionPort);
      ajn::SessionPort getSessionPort();
    private:
      ajn::SessionPort m_SessionPort;
  };
 
3.2.3 实例总线倾听器和初始化About功能
  busListener = new CommonBusListener();
  AboutServiceApi::Init(*bus, *propertyStore);
  AboutServiceApi* aboutService = AboutServiceApi::getInstance();
  busListener->setSessionPort(port);
  bus->RegisterBusListener(*busListener);
  TransportMask transportMask = TRANSPORT_ANY;
  SessionPort sp = port;
  SessionOpts opts(SessionOpts::TRAFFIC_MESSAGES, false, SessionOpts::PROXIMITY_ANY,transportMask);
  bus->BindSessionPort(sp, opts, *busListener);
  aboutService->Register(port);
  bus->RegisterBusObject(*aboutService);
 
3.3 初始化Control Panel服务和受控端
  ControlPanelService* controlPanelService = ControlPanelService::getInstance();
  ControlPanelControllee* controlPanelControllee = 0;
  ControlPanelGenerated::PrepareWidgets(controlPanelControllee);
  controlPanelService->initControllee(bus, controlPanelControllee);
 
3.4 发送通告
  AboutServiceApi* aboutService = AboutServiceApi::getInstance();
  aboutService->Announce();
 
3.5 创建头文件声明具体设备回调函数
3.5.1 GetCode属性的回调信号
  uint16_t getTemperature()
返回属性值,数据类型是具体应用程序需要的

3.5.2 SetCode属性的回调
这个信号不是视ControlPanel服务框架而定,是能基于具体应用需要而选择的。
假如一个属性设定新值,举例:
  void SetTemperature(uint16 newTemperature);
 
3.5.3 远程调用的回调
这个信号不是视ControlPanel服务框架而定,是能基于具体应用需要而选择的。
举例:
  void StartOven();
 
3.6 创建UI的XML定义
 
    MyDevice
    #include "ControlPanelProvided.h"
   
      en
      de
      fr
   

   
     
       
          //rootContainer properties and child elements go here.
       

     

   

 
 
 
3.6.1 命名规定
单元名字(详细说明在3.6.4)和每一个部件名字包含进一个control panel必须遵守以下规定
(那是因为单元名字和部件名字将被使用成AllJoyn BusObject对象路径的一部分)。
■只包含ASCII字符”[A-Z][a-z][0-9]_”
■不能空字符串
查看示例XML UI定义为样品名称,遵守这些规定。
    
3.6.2 使用XML模式创建controlPanel设备标签
 
 

 
3.6.3 定义单元名字在名字标签
定义单元名字在 controlPanel设备标签之间。
  MyDevice  

3.6.4 添加包含具体设备回调函数的声明在头文件
添加包含声明在名字标签之后。可以添加多个头文件。
更多信息参见3.3。
  #include "ControlPanelProvided.h"
 
2.6.5 定义控制面板的语言设置
这个添加在headerCode标签之后。这必须包括一个控制面板的语言列表可以显示在标签和消息。
可以定义多个语言设置。
 
    en
    de
    fr
 

 
3.6.6 建立contorl panel结构
这个添加在languageSet标签之后。每一个control panel必须定义优先语言设置。
可以定义多个contorl panel。
 
   
   

   
   

 

 
3.6.7 定义一个根容器和它的子项目
添加根容器在controlPanel标签内部。根容器是主要的容器部件,用于小部件组合在一起,构成了控制面板。
容器部件和可选的子部件的更多信息,参见表4 和第4章节。
 
    //rootContainer properties and child elements go here.
 


3.7 运行代码生成器工具
在CPSAppGenerator目录,运行生成器命令从XML产生Control Panel生成代码。
  python generateCPSApp.py [nameOfXML] [DirectoryOfApplication]
这个Python脚本在应用程序目录生成如下C和H文件:
■ ControlPanelGenerated.cc
■ ControlPanelGenerated.h
另外,定义在XML里的每一个属性和活动生成一个类。
这些文件将被适用于构建  

3.8 编译代码

4 XML UI元素概述
4.1 容器
4.1.1 容器XML例子
 
    rootContainer
    false
    true
    0x200
   
   
      vertical_linear
   

   
      //Child elements (Action/Property/Label/Container etc) defined here
   

 
4.1.2 容器内容
---------------------------------------------------------------
属性    |    可选值            | 必需   | 描述
---------------------------------------------------------------
name    |    字母数字          |  Yes   |  部件名字
---------------------------------------------------------------
secured |    True/False        |  Yes   |  确定容器界面是否安全
---------------------------------------------------------------
enabled |    True/False        |  Yes   |  确定容器是否显示
---------------------------------------------------------------
bgcolor |    unsigned int      |  No    |  背景颜色RGB值
---------------------------------------------------------------
label   |    code              |  No    |  容器的标签
        |    value             |        |  如果是code,接收标签的函数指针
        |                      |        |  如果是value,一个文字或常量
---------------------------------------------------------------
hints   |    vertical_linear   |  No    |  容器布局指示
        |    horizontal_linear |        |
---------------------------------------------------------------
elements|    Action            |  Yes   |  子部件
        |    Property          |        |  可以是一个或多个在容器内部
        |    LabelProperty     |        |
        |    Container         |        |
---------------------------------------------------------------

4.2 动作
4.2.1 动作XML例子
onAction标签包含执行代码和会话选项。这两种选择都不能包括在相同的标签。

  ovenAction
 
    startOven();
    OR
   
      //dialog properties here
   

 

  true
  true
 
  0x400
 
    actionButton
 



4.2.2 动作内容
---------------------------------------------------------------
属性    |    可选值            | 必需   | 描述
---------------------------------------------------------------
name    |    字母数字          |  Yes   |  部件名字
---------------------------------------------------------------
onAction|    exectuCode        |  Yes   |  确定当动作按钮被按下时发生什么
        |    dialog            |        |  如果是executeCode,代码将被执行
        |                      |        |  如果是dialog,一个对话将被显示
---------------------------------------------------------------
secured |    True/False        |  Yes   |  确定动作界面是否安全
---------------------------------------------------------------
enabled |    True/False        |  Yes   |  确定动作是否显示
---------------------------------------------------------------
bgcolor |    unsigned int      |  No    |  背景颜色RGB值
---------------------------------------------------------------
label   |    code              |  No    |  
        |    value             |        |  如果是code,接收标签的函数指针
        |                      |        |  如果是value,一个文字或常量
---------------------------------------------------------------
hints   |    Action hint       |  No    |  可以是actionButton
---------------------------------------------------------------

4.3 标签属性
4.3.1 标签属性XML例子
 
    CurrentTemp
    true
   
    0x98765
   
      textlabel
   

 

4.3.2 标签属性内容
---------------------------------------------------------------
属性    |    可选值            | 必需   | 描述
---------------------------------------------------------------
name    |    字母数字          |  Yes   |  部件名字
---------------------------------------------------------------
enabled |    True/False        |  Yes   |  确定动作是否显示
---------------------------------------------------------------
---------------------------------------------------------------
label   |    code              |  Yes   |  
        |    value             |        |  如果是code,接收标签的函数指针
        |                      |        |  如果是value,一个文字或常量
---------------------------------------------------------------
bgcolor |    unsigned int      |  No    |  背景颜色RGB值
---------------------------------------------------------------
hints   |    Label hint        |  No    |  可以是文本标签
---------------------------------------------------------------

4.4 属性
根据信号的值,有不同的方法来构造一个XML属性。以下的章节提供样本和每一个支持的信号的属性信息。
■ String
■ Boolean
■ Date
■ Time
■ Scalar

4.4.1 字符串属性例子
 
    modeStringProperty
    getStringVar
    setStringVar(%s)
    false
    true
    true
   
    0x500
   
      edittext
   

   
     
       
          Grill Mode
          Grill Modus
       

        Grill
     

     
       
          Regular Mode
          Normal Modus
       

        Normal
     

   

 


4.4.2 字符串属性内容
---------------------------------------------------------------
属性    |    可选值            | 必需   | 描述
---------------------------------------------------------------
name    |    字母数字          |  Yes   |  部件名字
---------------------------------------------------------------
Property|    函数指针          |  Yes   |  指针的函数返回属性值
        |                      |        |  函数指针的信号形式:
        |                      |        | void* (*func)()
---------------------------------------------------------------
setCode |    执行设置属性代码  |  Yes   |  当设置属性时被调用的代码,
        |                      |        |  在setCode内容里%s将被生
        |                      |        | 成器用新值代替
---------------------------------------------------------------
secured |    True/False        |  Yes   |  确定属性界面是否安全
---------------------------------------------------------------
enabled |    True/False        |  Yes   |  确定属性是否显示
---------------------------------------------------------------
writable|    True/False        |  Yes   |  确定属性是否可写
---------------------------------------------------------------
bgcolor |    unsigned int      |  No    |  背景颜色RGB值
---------------------------------------------------------------
label   |    code              |  No    |  
        |    value             |        |  如果是code,接收标签的函数指针
        |                      |        |  如果是value,一个文字或常量
---------------------------------------------------------------
hints   |    switch            |  No    |  布局指示
        |    spinner           |        |
        |    radiobutton       |        |
        |    textview          |        |
        |    edittext          |        |
---------------------------------------------------------------
constraintVals  |    约束清单  |  No    |  约束属性的值。
        |                      |        | 每个约束由一个值和它的显示组成
---------------------------------------------------------------

4.4.3 布尔值属性例子

  checkboxProperty
  getTurboModeVar
  setTurboModeVar(%s)
  false
  true
  true
 
  0x500
 
    checkbox
 



4.4.4 布尔值属性内容
---------------------------------------------------------------
属性    |    可选值            | 必需   | 描述
---------------------------------------------------------------
name    |    字母数字          |  Yes   |  部件名字
---------------------------------------------------------------
getCode |    函数指针          |  Yes   |  指针的函数返回属性值
        |                      |        |  函数指针的信号形式:
        |                      |        | void* (*func)()
---------------------------------------------------------------
setCode |    执行设置属性代码  |  Yes   |  当设置属性时被调用的代码,
        |                      |        |  在setCode内容里%s将被生
        |                      |        | 成器用新值代替
---------------------------------------------------------------
secured |    True/False        |  Yes   |  确定属性界面是否安全
---------------------------------------------------------------
enabled |    True/False        |  Yes   |  确定属性是否显示
---------------------------------------------------------------
writable|    True/False        |  Yes   |  确定属性是否可写
---------------------------------------------------------------
bgcolor |    unsigned int      |  No    |  背景颜色RGB值
---------------------------------------------------------------
label   |    code              |  No    |  
        |    value             |        |  如果是code,接收标签的函数指针
        |                      |        |  如果是value,一个文字或常量
---------------------------------------------------------------
hints   |    chechbox          |  No    |  布局指示
---------------------------------------------------------------

4.4.5 日期属性例子
 
    startDateProperty
    getStartDateVar
    setStartDateVar(%s)
    false
    true
    true
   
    0x500
   
      datepicker
   

 

4.4.6 日期串属性内容
---------------------------------------------------------------
属性    |    可选值            | 必需   | 描述
---------------------------------------------------------------
name    |    字母数字          |  Yes   |  部件名字
---------------------------------------------------------------
getCode |    函数指针          |  Yes   |  指针的函数返回属性值
        |                      |        |  函数指针的信号形式:
        |                      |        | void* (*func)()
---------------------------------------------------------------
setCode |    执行设置属性代码  |  Yes   |  当设置属性时被调用的代码,
        |                      |        |  在setCode内容里%s将被生
        |                      |        | 成器用新值代替
---------------------------------------------------------------
secured |    True/False        |  Yes   |  确定属性界面是否安全
---------------------------------------------------------------
enabled |    True/False        |  Yes   |  确定属性是否显示
---------------------------------------------------------------
writable|    True/False        |  Yes   |  确定属性是否可写
---------------------------------------------------------------
bgcolor |    unsigned int      |  No    |  背景颜色RGB值
---------------------------------------------------------------
label   |    code              |  No    |  
        |    value             |        |  如果是code,接收标签的函数指针
        |                      |        |  如果是value,一个文字或常量
---------------------------------------------------------------
hints   |    datepicker        |  No    |  布局指示
---------------------------------------------------------------

4.4.7 时间串属性例子
 
    startTimeProperty
    getStartTimeVar
    setStartTimeVar(%s)
    false
    true
    true
   
    0x500
   
      timepicker
   

 

4.4.8 时间串属性内容
---------------------------------------------------------------
属性    |    可选值            | 必需   | 描述
---------------------------------------------------------------
name    |    字母数字          |  Yes   |  部件名字
---------------------------------------------------------------
getCode |    函数指针          |  Yes   |  指针的函数返回属性值
        |                      |        |  函数指针的信号形式:
        |                      |        | void* (*func)()
---------------------------------------------------------------
setCode |    执行设置属性代码  |  Yes   |  当设置属性时被调用的代码,
        |                      |        |  在setCode内容里%s将被生
        |                      |        | 成器用新值代替
---------------------------------------------------------------
secured |    True/False        |  Yes   |  确定属性界面是否安全
---------------------------------------------------------------
enabled |    True/False        |  Yes   |  确定属性是否显示
---------------------------------------------------------------
writable|    True/False        |  Yes   |  确定属性是否可写
---------------------------------------------------------------
bgcolor |    unsigned int      |  No    |  背景颜色RGB值
---------------------------------------------------------------
label   |    code              |  No    |  
        |    value             |        |  如果是code,接收标签的函数指针
        |                      |        |  如果是value,一个文字或常量
---------------------------------------------------------------
hints   |    timepicker        |  No    |  布局指示
---------------------------------------------------------------

4.4.9 标量属性例子
 
    heatProperty
    getTemperatureVar
    setTemperatureVar(%s)
    false
    true
    true
   
    0x500
   
      spinner
   

   
     
       
         
            Regular
            Normal
         

          175
       

       
         
            Hot
            Heiss
         

          200
       

     

      OR
     
        0
        400
        25
     

   

   
      Degrees
      Grad
   

 


4.4.10 标量属性内容
---------------------------------------------------------------
属性    |    可选值             | 必需   | 描述
---------------------------------------------------------------
dataType|    INT16              |  Yes   |  标量数据类型
        |    UINT16             |        |  
        |    INT32              |        |  
        |    UINT32             |        |  
        |    INT64              |        |  
        |    UINT64             |        |  
        |    DOUBLE             |        |  
        |    UINT16             |        |  
        |    UINT16             |        |  
        |    UINT16             |        |  
---------------------------------------------------------------
name    |    字母数字           |  Yes   |  部件名字
---------------------------------------------------------------
getCode |    函数指针           |  Yes   |  指针的函数返回属性值
        |                       |        |  函数指针的信号形式:
        |                       |        | void* (*func)()
---------------------------------------------------------------
setCode |    执行设置属性代码   |  Yes   |  当设置属性时被调用的代码,
        |                       |        |  在setCode内容里%s将被生
        |                       |        | 成器用新值代替
---------------------------------------------------------------
secured |    True/False         |  Yes   |  确定属性界面是否安全
---------------------------------------------------------------
enabled |    True/False         |  Yes   |  确定属性是否显示
---------------------------------------------------------------
writable|    True/False         |  Yes   |  确定属性是否可写
---------------------------------------------------------------
bgcolor |    unsigned int       |  No    |  背景颜色RGB值
---------------------------------------------------------------
label   |    code               |  No    |  
        |    value              |        |  如果是code,接收标签的函数指针
        |                       |        |  如果是value,一个文字或常量
---------------------------------------------------------------
hints   |    spinner            |  No    |  布局指示
        |    radiobutton        |        |  
        |    slider             |        |  
        |    numberpicker       |        |  
        |    keypad             |        |  
        |    numericview        |        |  
---------------------------------------------------------------
constraintDefs|                 |  No    |  
        |    constraintList     |        |  constraintList:
        |    constrainRange     |        |    每个约束由一个值和它的显示组成
        |                       |        |  constrainRange:
        |                       |        |    每个约束由最小值/最大值/增值组成
---------------------------------------------------------------        
unitMeasure|                    |  No    |  属性的计量单位
        |    code               |        | code:接收计量单位的函数指针
        |    value              |        | value:文本或常量
---------------------------------------------------------------

4.5 对话
4.5.1 对话XML例子
 
    LightConfirm
    false
    true
   
      Do you want to turn on the light
      Wollen sie das Licht andrehen
   

   
    0x122
   
      alertdialog
   

   
   
 

 
4.5.2 对话内容
---------------------------------------------------------------
属性    |    可选值            | 必需   | 描述
---------------------------------------------------------------
name    |    字母数字          |  Yes   |  部件名字
---------------------------------------------------------------
secured |    True/False        |  Yes   |  确定属性界面是否安全
---------------------------------------------------------------
enabled |    True/False        |  Yes   |  确定属性是否显示
---------------------------------------------------------------
message |    code              |  Yes   |  
        |    value             |        |  如果是code,接收标签的函数指针
        |                      |        |  如果是value,一个文字或常量
---------------------------------------------------------------
label   |    code              |  No    |  
        |    value             |        |  如果是code,接收标签的函数指针
        |                      |        |  如果是value,一个文字或常量
---------------------------------------------------------------
bgcolor |    unsigned int      |  No    |  背景颜色RGB值        
---------------------------------------------------------------
hints   |    alertdialog       |  No    |  布局指示
---------------------------------------------------------------
button  |    Label和executeCode|  Yes   |  每个button必须包含如下:
        |                      |  能多达|  Label:在按键上的文本
        |                      |  3个   |  executeCode:按下按键时
        |                      |        |  执行大代码  
---------------------------------------------------------------
阅读(1645) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~