首页 / 专利库 / 电脑编程 / 算法 / 贝尔曼-福特算法 / 扩展到用反向弧编码最小和最大约束的有向图的方法和装置

扩展到用反向弧编码最小和最大约束的有向图的方法和装置

阅读:469发布:2020-05-13

专利汇可以提供扩展到用反向弧编码最小和最大约束的有向图的方法和装置专利检索,专利查询,专利分析的服务。并且公开了用于基于布局生成显示的装置和方法。接收布局,该布局 指定 容器矩形内的一组矩形组件。每个矩形组件具有大小。从布局确定多条网格线。每个矩形组件与基于该矩形组件的大小的至少两条网格线相关联。生成约束的系统,其包括最小约束和最大约束。每个约束与多条网格线中的至少两条网格线相关。最小约束和最大约束分别指定至少两条网格线之间的最小值和最大值。解决约束的系统以确定每条网格线的 位置 。基于网格线的位置来生成矩形组件的显示。,下面是扩展到用反向弧编码最小和最大约束的有向图的方法和装置专利的具体信息内容。

1.一种由计算设备实现的方法,包括:
在计算设备处接收布局,该布局被配置为指定容器矩形内的至少一组矩形组件,其中每个矩形组件具有至少一个维度上的至少一个大小;
所述计算设备从所述布局确定多条网格线,所述一组矩形组件中的每个矩形组件与所述多条网格线中的至少两条网格线相关联,所述至少两条网格线是基于该矩形组件的至少一个大小的;
所述计算设备生成约束的系统,所述约束的系统包括最小约束和最大约束,其中所述约束的系统的每个约束与所述多条网格线中的至少两条网格线相关,其中所述约束的系统的最小约束指定至少两条网格线之间的最小值,并且其中所述约束的系统的最大约束指定至少两条网格线之间的最大值;
所述计算设备解决所述约束的系统以为所述多条网格线中的每条网格线确定该网格线的位置;以及
所述计算设备基于网格线的位置来生成所述一组矩形组件中的至少一些矩形组件的显示。
2.如权利要求1所述的方法,其中,所述最小约束和最大约束两者与所述一组矩形组件中的单个矩形组件相关联,所述单个矩形组件与所述多条网格线中的第一网格线和所述多条网格线中的第二网格线相关联。
3.如权利要求2所述的方法,其中,所述最小约束包括对于所述单个矩形组件的关于最小值的约束,并且
其中,所述最大约束包括对于所述单个矩形组件的关于最大值的约束。
4.如权利要求2所述的方法,其中,解决所述约束的系统以为所述多条网格线中的每条网格线确定该网格线的位置包括:
生成包括多个节点和多个边缘的图,其中所述多个节点对应于所述多条网格线,其中所述多个边缘对应于所述约束的系统;
其中,所述多个边缘中的至少最小边缘和最大边缘分别与所述约束的系统的所述最小约束和所述最大约束相关联,并且
其中,所述最小边缘具有第一方向,并且所述最大边缘具有不同于所述第一方向的第二方向。
5.如权利要求4所述的方法,其中所述多个节点中的第一节点对应于所述第一网格线,其中所述多个节点中的第二节点对应于所述第二网格线,其中所述最小边缘是从所述第一节点到所述第二节点的正向边缘,并且其中所述最大边缘是从所述第二节点到所述第一节点的反向边缘。
6.如权利要求5所述的方法,其中,解决所述约束的系统以为所述多条网格线中的每条网格线确定该网格线的位置包括:
为所述第一节点确定第一节点权重;
为所述第二节点确定第二节点权重;以及
确定在所述最小值与所述最大值之间的所述第二节点权重与所述第一节点权重之间的差异。
7.如权利要求6所述的方法,其中,基于网格线的位置来生成所述一组矩形组件中的至少一些矩形组件的显示包括:
基于所述第一节点权重来确定第一位置并基于所述第二节点权重来确定第二位置;以及
在所述显示中在所述第一位置和所述第二位置之间显示所述单个矩形组件。
8.如权利要求4所述的方法,还包括:
将所述多个边缘分成至少第一部分边缘和第二部分边缘,其中所述最小边缘在所述第一部分中,并且其中所述最大边缘在所述第二部分中,其中所述第一部分中的每个边缘在所述第一方向上,并且其中所述第二部分中的每个边缘在所述第二方向上。
9.如权利要求8所述的方法,还包括:
对所述第一部分边缘排序;
与所述第一部分边缘分开地对所述第二部分边缘排序;以及
合并所述第一部分边缘和第二部分边缘。
10.如权利要求9所述的方法,还包括:
生成所述多个边缘的排序,其中所述第一部分边缘中的每个边缘先于所述第二部分边缘中的每个边缘;并且其中合并所述第一部分边缘和第二部分边缘包括将所述第一部分边缘和第二部分边缘合并成边缘的合并列表,使得所述合并列表中的所述第一部分中的每个边缘在所述合并列表中先于所述第二部分边缘的所有边缘。
11.如权利要求10所述的方法,其中,解决所述约束的系统包括利用在所述合并列表上操作的贝尔曼-福特算法的变体来解决单源路径长度问题。
12.一种计算设备,包括:
处理器;以及
数据存储装置,被配置为至少存储计算机可读程序指令,其中所述指令被配置为在被所述处理器执行时使得所述计算设备执行功能,所述功能包括:
接收布局,该布局被配置为指定容器矩形内的至少一组矩形组件,
其中每个矩形组件具有至少一个维度上的至少一个大小;
从所述布局确定多条网格线,其中所述一组矩形组件中的每个矩形组件与所述多条网格线中的至少两条网格线相关联,所述至少两条网格线是基于该矩形组件的至少一个大小的;
生成约束的系统,所述约束的系统包括最小约束和最大约束,其中所述约束的系统的每个约束与所述多条网格线中的至少两条网格线相关,并且其中所述约束的系统的最小约束指定至少两条网格线之间的最小值,并且其中所述约束的系统的最大约束指定至少两条网格线之间的最大值;
解决所述约束的系统以为所述多条网格线中的每条网格线确定该网格线的位置;以及基于网格线的位置来生成所述一组矩形组件中的至少一些矩形组件的显示。
13.如权利要求12所述的计算设备,其中,所述最小约束和最大约束两者与所述一组矩形组件中的单个矩形组件相关联,所述单个矩形组件与所述多条网格线中的第一网格线和所述多条网格线中的第二网格线相关联。
14.如权利要求13所述的计算设备,其中,所述最小约束包括对于所述单个矩形组件的关于最小值的约束,并且
其中,所述最大约束包括对于所述单个矩形组件的关于最大值的约束。
15.如权利要求13所述的计算设备,其中,解决所述约束的系统包括:
生成包括多个节点和多个边缘的图,其中所述多个节点对应于所述多条网格线,并且其中所述多个边缘对应于所述约束的系统;
其中,所述多个边缘中的至少最小边缘和最大边缘分别与所述约束的系统的所述最小约束和所述最大约束相关联,并且
其中,所述最小边缘具有第一方向,并且所述最大边缘具有不同于所述第一方向的第二方向。
16.如权利要求15所述的计算设备,其中所述多个节点中的第一节点对应于所述第一网格线,其中所述多个节点中的第二节点对应于所述第二网格线,其中所述最小边缘是从所述第一节点到所述第二节点的正向边缘,并且其中所述最大边缘是从所述第二节点到所述第一节点的反向边缘。
17.如权利要求16所述的计算设备,其中,解决所述约束的系统包括:
为所述第一节点确定第一节点权重;
为所述第二节点确定第二节点权重;以及
确定在所述最小值与所述最大值之间的所述第二节点权重与所述第一节点权重之间的差异。
18.如权利要求17所述的计算设备,其中,生成所述显示包括:
基于所述第一节点权重来确定第一位置并基于所述第二节点权重来确定第二位置;以及
在所述显示中在所述第一位置和所述第二位置之间显示所述单个矩形组件。
19.如权利要求15所述的计算设备,其中,所述功能还包括:
将所述多个边缘分成至少第一部分边缘和第二部分边缘,其中所述最小边缘在所述第一部分中,并且其中所述最大边缘在所述第二部分中,其中所述第一部分中的每个边缘在所述第一方向上,并且其中所述第二部分中的每个边缘在所述第二方向上。
20.如权利要求19所述的计算设备,其中,所述功能还包括:
对所述第一部分边缘排序;
与所述第一部分边缘分开地对所述第二部分边缘排序;以及
合并所述第一部分边缘和第二部分边缘。
21.如权利要求20所述的计算设备,其中,所述功能还包括:
生成所述多个边缘的排序,其中所述第一部分边缘中的每个边缘先于所述第二部分边缘中的每个边缘;并且其中合并所述第一部分边缘和第二部分边缘包括将所述第一部分边缘和第二部分边缘合并成边缘的合并列表,使得所述合并列表中的所述第一部分中的每个边缘在所述合并列表中先于所述第二部分边缘的所有边缘,并且
其中,解决所述约束的系统包括利用在所述合并列表上操作的贝尔曼-福特算法的变体来解决单源路径长度问题。
22.一种计算设备,包括存储有指令的非暂态计算机可读存储介质,所述指令响应于被处理器执行而使得所述处理器执行功能,所述功能包括:
接收布局,该布局被配置为指定容器矩形内的至少一组矩形组件,其中每个矩形组件具有至少一个维度上的至少一个大小;
从所述布局确定多条网格线,其中所述一组矩形组件中的每个矩形组件与所述多条网格线中的至少两条网格线相关联,所述至少两条网格线是基于该矩形组件的至少一个大小的;
生成约束的系统,所述约束的系统包括最小约束和最大约束,其中所述约束的系统的每个约束与所述多条网格线中的至少两条网格线相关,并且其中所述约束的系统的最小约束指定至少两条网格线之间的最小值,并且其中所述约束的系统的最大约束指定至少两条网格线之间的最大值;
解决所述约束的系统以为所述多条网格线中的每条网格线确定该网格线的位置;以及基于网格线的位置来生成所述一组矩形组件中的至少一些矩形组件的显示。
23.如权利要求22所述的计算设备,其中所述最小约束和最大约束两者与所述一组矩形组件中的单个矩形组件相关联,所述单个矩形组件与所述多条网格线中的第一网格线和所述多条网格线中的第二网格线相关联,其中所述最小约束包括对于所述单个矩形组件的关于最小值的约束,并且其中所述最大约束包括对于所述单个矩形组件的关于最大值的约束。
24.如权利要求23所述的计算设备,其中,解决所述约束的系统包括:
生成包括多个节点和多个边缘的图,其中所述多个节点对应于所述多条网格线,并且其中所述多个边缘对应于所述约束的系统;
其中,所述多个边缘中的至少最小边缘和最大边缘分别与所述约束的系统的所述最小约束和所述最大约束相关联,并且
其中,所述最小边缘具有第一方向,并且所述最大边缘具有不同于所述第一方向的第二方向。
25.如权利要求24所述的计算设备,其中所述多个节点中的第一节点对应于所述第一网格线,其中所述多个节点中的第二节点对应于所述第二网格线,其中所述最小边缘是从所述第一节点到所述第二节点的正向边缘,并且其中所述最大边缘是从所述第二节点到所述第一节点的反向边缘。
26.如权利要求25所述的计算设备,其中,解决所述约束的系统包括:
为所述第一节点确定第一节点权重;
为所述第二节点确定第二节点权重;以及
确定在所述最小值与所述最大值之间所述第二节点权重与所述第一节点权重之间的差异。
27.如权利要求26所述的计算设备,其中,生成所述显示包括:
基于所述第一节点权重来确定第一位置并基于所述第二节点权重来确定第二位置;以及
在所述显示中在所述第一位置和所述第二位置之间显示所述单个矩形组件。
28.如权利要求24所述的计算设备,其中,所述功能还包括:
将所述多个边缘分成至少第一部分边缘和第二部分边缘,其中所述最小边缘在所述第一部分中,并且其中所述最大边缘在所述第二部分中,其中所述第一部分中的每个边缘在所述第一方向上,并且其中所述第二部分中的每个边缘在所述第二方向上。
29.如权利要求28所述的计算设备,其中,所述功能还包括:
对所述第一部分边缘排序;
与所述第一部分边缘分开地对所述第二部分边缘排序;以及
合并所述第一部分边缘和第二部分边缘。
30.如权利要求29所述的计算设备,其中,所述功能还包括:
生成所述多个边缘的排序,其中所述第一部分边缘中的每个边缘先于所述第二部分边缘中的每个边缘;并且其中合并所述第一部分边缘和第二部分边缘包括将所述第一部分边缘和第二部分边缘合并成边缘的合并列表,使得所述合并列表的所述第一部分中的每个边缘在所述合并列表中先于所述第二部分边缘的所有边缘,并且
其中,解决所述约束的系统包括利用在所述合并列表上操作的贝尔曼-福特算法的变体来解决单源路径长度问题。

说明书全文

扩展到用反向弧编码最小和最大约束的有向图的方法和装置

[0001] 相关申请的交叉引用
[0002] 本申请要求2012年8月3日递交的美国专利申请13/566,749号的优先权,该美国专利申请要求2011年9月30日递交的标题为“Apparatus and Methods for Efficient Layout of Components on a User-Interface”的美国临时申请61/541,853号的优先权,这里通过引用将这些美国申请的内容完全并入用于所有目的。

背景技术

[0003] 在计算设备上操作的许多现代计算机应用提供图形用户界面来用于用户交互。控制计算设备的操作系统频繁地向这些应用提供某种类型的支持以辅助设计用户界面来允许利用操作系统的应用有共同的外观和感觉。
[0004] 操作系统提供给应用来帮助设计用户界面的示例工具是“布局管理器”,其被配置为接收“布局”(layout),或者说用于将用户界面可用的一个或多个相对较大的矩形划分成可由空间分隔的一组较小的矩形的系列指令。相对较大的矩形通常被称为“容器”(container),而这些较小的矩形通常被称为“组件”(component)。通常,布局管理器实现与容器相关联的布局策略。发明内容
[0005] 在第一方面中,计算设备接收布局,该布局被配置为指定容器矩形内的至少一组矩形组件。每个矩形组件具有至少一个维度上的至少一个大小。计算设备从布局确定多条网格线。该组矩形组件中的每个矩形组件与这多条网格线中的至少两条网格线相关联。这至少两条网格线是基于该矩形组件的至少一个大小的。计算设备生成约束的系统,其中约束的系统的每个约束与多条网格线中的至少两条网格线相关。计算设备解决约束的系统,以为多条网格线中的每条网格线确定该网格线的位置。计算设备基于网格线的位置生成该组矩形组件中的至少一些矩形组件的显示。
[0006] 在第二方面中,计算设备接收用户界面布局,用户界面布局被配置为指定至少第一矩形组件和第二矩形组件,两者都在容器矩形内。第一矩形组件在平或垂直维度上具有第一大小。第二矩形组件在水平或垂直维度上具有第二大小。计算设备基于用户界面布局确定多条网格线。第一矩形组件与多条网格线中的第一组至少两条网格线相关联,并且第二矩形组件与多条网格线中的第二组至少两条网格线相关联。计算设备可生成约束的系统,其中约束的系统中的第一约束与第一组至少两条网格线相关,并且约束的系统中的第二约束与第二组至少两条网格线相关。计算设备解决约束的系统以为第一组和第二组网格线中的各条网格线确定各条网格线各自的位置。计算设备可基于各条网格线各自的位置生成包括第一和第二矩形组件的用户界面显示。计算设备可显示该用户界面显示。
[0007] 在第三方面中,计算设备接收布局,该布局被配置为指定容器矩形内的至少一组矩形组件。每个矩形组件具有至少一个维度上的至少一个大小。计算设备从布局确定多条网格线。该组矩形组件中的每个矩形组件与这多条网格线中的至少两条网格线相关联。这至少两条网格线基于该矩形组件的至少一个大小。计算设备生成约束的系统,其中约束的系统的每个约束与多条网格线中的至少两条网格线相关。计算设备生成包括多个节点和多个边缘的图。每个节点与节点值相关联。多个节点对应于多条网格线,并且多个边缘对应于约束的系统。计算设备对多个边缘进行拓扑排序。计算设备通过利用被配置为结合经拓扑排序的多个边缘进行操作的贝尔曼-福特(Bellman-Ford)算法的变体对于图解决单源路径长度问题来确定网格线的位置。计算设备基于网格线的位置生成该组矩形组件中的至少一些矩形组件的显示。
[0008] 在第四方面中,计算设备接收布局,该布局被配置为指定容器矩形内的至少一组矩形组件,其中该组矩形组件中的每个矩形组件具有至少一个维度上的至少一个大小。该组矩形组件包括空间组件,该空间组件被配置为不可见并且被配置为不对用户界面事件作出反应。计算设备从布局确定多条网格线。该组矩形组件中的每个矩形组件与这多条网格线中的至少两条网格线相关联。这至少两条网格线是基于该矩形组件的至少一个大小的。计算设备生成约束的系统,其中约束的系统的每个约束与多条网格线中的至少两条网格线相关。计算设备解决约束的系统以为多条网格线中的每条网格线确定该网格线的位置。计算设备基于网格线的位置生成该组矩形组件中的至少一些矩形组件的显示。
[0009] 在第五方面中,计算设备接收布局,该布局被配置为指定容器矩形内的至少一组矩形组件。该组矩形组件中的每个矩形组件具有至少一个维度上的至少一个大小。计算设备从布局确定多条网格线。该组矩形组件中的每个矩形组件与这多条网格线中的至少两条网格线相关联。至少两条网格线是基于该矩形组件的至少一个大小的。计算设备生成约束的系统,约束的系统包括一个或多个正常顺序约束。约束的系统的每个约束与多条网格线中的至少两条网格线相关。一个或多个正常顺序约束指定多条网格线的正常顺序。计算设备解决约束的系统以为多条网格线中的每条网格线确定该网格线的第一位置。计算设备识别一个或多个正常顺序约束中的至少一个可放松的正常顺序约束。计算设备基于放松至少一个可放松的正常顺序约束来解决约束的系统以为多条网格线中的每条网格线确定该网格线的第二位置。对于多条网格线中的至少一条被放松的网格线,第二位置不同于第一位置。计算设备基于网格线的第二位置来生成该组矩形组件中的至少一些矩形组件的显示。计算设备显示该显示。
[0010] 在第六方面中,在计算设备处接收布局。该布局被配置为指定容器矩形内的一组矩形组件。每个矩形组件具有至少一个维度上的至少一个大小,并且被配置有重参数。每个矩形组件基于该矩形组件的重力参数被分类为灵活的或不灵活的。计算设备可从布局确定多条网格线。该组矩形组件中的每个矩形组件与这多条网格线中的至少两条网格线相关联。这至少两条网格线是基于该矩形组件的至少一个大小的。计算设备可生成约束的系统,其中约束的系统的各个约束与多条网格线中的至少两条网格线相关。计算设备可解决约束的系统以为多条网格线中的每条网格线确定该网格线的位置。计算设备可基于网格线的位置来生成该组矩形组件中的至少一些矩形组件的显示。
[0011] 在第七方面中,计算设备接收布局,该布局被配置为指定容器矩形内的至少一组矩形组件。该组矩形组件中的每个矩形组件具有至少一个维度上的至少一个大小。计算设备从布局确定多条网格线。该组矩形组件中的每个矩形组件与这多条网格线中的至少两条网格线相关联。这至少两条网格线是基于该矩形组件的至少一个大小的。计算设备生成约束的系统,约束的系统包括最小约束和最大约束。约束的系统的每个约束与所述多条网格线中的至少两条网格线相关。最小约束指定至少两条网格线之间的最小值,并且最大约束指定至少两条网格线之间的最大值。计算设备解决约束的系统以为多条网格线中的每条网格线确定该网格线的位置。计算设备基于网格线的位置来生成该组矩形组件中的至少一些矩形组件的显示。
[0012] 在第八方面中,计算设备接收布局,该布局被配置为指定容器矩形内的至少一组矩形组件。该组矩形组件中的每个矩形组件具有至少一个维度上的至少一个大小。计算设备从布局确定多条网格线。该组矩形组件中的每个矩形组件与这多条网格线中的至少两条网格线相关联。这至少两条网格线是基于该矩形组件的至少一个大小的。计算设备生成约束的系统。约束的系统的每个约束与多条网格线中的至少两条网格线相关。约束的系统包括不一致约束。生成具有多个节点和多个边缘的图。每个节点与节点值相关联。多个节点对应于多条网格线。多个边缘对应于约束的系统。计算设备利用被配置为结合不一致约束进行操作的贝尔曼-福特算法的变体解决约束的系统以确定网格线的位置。计算设备基于网格线的位置生成该组矩形组件中的至少一些矩形组件的显示。
[0013] 本领域普通技术人员通过阅读以下详细描述并在适当时参考附图,将清楚这些以及其他方面、优点和替换方案。另外,应当理解,此发明内容部分和本文献中其他地方提供的描述打算以示例而非限制的方式说明要求保护的主题。

附图说明

[0014] 图1示出了根据示例实施例的分布式计算体系结构。
[0015] 图2A是根据示例实施例的计算设备的框图
[0016] 图2B示出了根据示例实施例的基于服务器系统。
[0017] 图3根据示例实施例示出了不具有和具有网格线的示例用户界面的场景。
[0018] 图4根据示例实施例示出了与图3的示例用户界面相对应的示例网格、约束和图。
[0019] 图5根据示例实施例示出了图4所示的示例图的初始和最终图。
[0020] 图6A和6B根据示例实施例示出了基于图5的最终图中的值的示例用户界面。
[0021] 图6C、6D和6E根据示例实施例示出了基于图3的示例用户界面的高度约束的示例用户界面。
[0022] 图7A和7B根据示例实施例示出了另一场景,其中包括示例网格中的值的范围的指定,以及相应的约束、最终图和用户界面。
[0023] 图8是根据示例实施例的方法的流程图
[0024] 图9是根据示例实施例的方法的流程图。
[0025] 图10是根据示例实施例的方法的流程图。
[0026] 图11是根据示例实施例的方法的流程图。
[0027] 图12是根据示例实施例的方法的流程图。
[0028] 图13是根据示例实施例的方法的流程图。
[0029] 图14是根据示例实施例的方法的流程图。
[0030] 图15是根据示例实施例的方法的流程图。

具体实施方式

[0031] 概述
[0032] 随着支持计算应用的设备的类型的种类增加,设计能够支持这些设备的灵活的布局管理器的挑战也相应地增加了。例如,可能希望软件应用能够在不同类型的移动电话、平板计算机和/或数字电视上恰当地操作。
[0033] 然而,这些设备支持的显示大小和显示分辨率(例如,像素密度)可能大不相同。移动电话可具有从208x208以下那么小到960x640以上那么大的显示分辨率(这里,m x n的显示分辨率一般指的是设备上的显示屏幕支持水平方向上m像素和垂直方向上n像素)。平板计算机可支持从768x480以下那么小到1280x1024以上的显示分辨率。现代的高清晰度数字电视支持许多显示分辨率,一些超过了1920x1080。
[0034] 由于显示分辨率的这种极大的多样性,所以即使在所有可能设备的子集上促进具有一致格式的应用用户界面布局也是有挑战性的。尤其有挑战性的是设计能够支持在具有更小屏幕分辨率的设备上恰当显示用户界面布局的布局管理器。
[0035] 在一些布局管理器中,设计布局策略涉及指定并随后确定:(i)组件内的水平和/或垂直对齐,以及(ii)容器内的组件的固定或可改变的“灵活性”。组件的灵活性可用于指示组件的大小在至少一个维度上能够被调整以便将组件适配在组件的显示内的程度。布局管理器随后可收集容器矩形内的每个组件的大小、对齐和灵活性要求以基于这些组件的位置和大小来产生用户界面。然后,应用可利用布局的用户界面来允许用户与应用的其余部分交互。
[0036] 本公开涉及基于解决由布局为容器矩形内的一个或多个矩形组件指定的一系列约束来生成用户界面显示。布局可将容器矩形在逻辑上划分成行和列,包含的矩形组件沿着这些行和列布置。一般来说,可将组件定义为占据容器矩形的多于一行和/或多于一列,只要这些行和列是毗邻的。这种组件的指定通常是按照起始行或列index(索引)和span(跨度)来指示的——垂直轴以行索引和行跨度指定,而水平轴以列索引和列跨度指定。
[0037] “单元群组”被定义为沿着X轴和Y轴由start(开始)和end(结束)索引定界的一组单元:总共四个数字。例如,如果想要一个占据被分割成5列和5行的用户界面的整个最顶行的组件,则可利用以下四个数字在布局内指定最顶行的单元群组:
[0038] rowStart(开始行)=0
[0039] rowEnd(结束行)=1
[0040] columnStart(开始列)=0
[0041] columnEnd(结束列)=5
[0042] 在所公开的布局系统中,这些数字可标识将容器矩形分成行和列的“网格线”。可以按照start索引和span或者一对start和end索引来指定这些行和列。例如,当定义容器内的四列时,定义这四列的网格线可被称为X0、X1、X2、X3和X4。类似地,定义四行的网格线可被标注为Y0、Y1、Y2、Y3和Y4。组件和容器矩形都可利用这些标注来定义;例如,容器矩形具有从X0跨越到X4的列和从Y0跨越到Y4的行。
[0043] 标注列的网格线的索引可按“正常顺序”在查看区域中出现;即,X0→X1→X2→X3→X4。行的相应正常顺序条件是Y0→Y1→Y2→Y3→Y4。然而,对于一些组件放弃正常顺序条件可允许网格线在受容器矩形控制的空间的一部分或全部上自由移动并产生一个强大得多的系统。其使得可能具有负的行高度和/或列宽度。例如,对于不可见组件指定负的行高度和/或列宽度可使得布局系统能够找到更好地适配其内容的布局解决方案。
[0044] 利用网格线来指定组件和容器矩形允许了转换到用于针对网格线指定像素位置的一系列约束。例如,如果一组件在x维由网格线X1至X3指定并且必须正好是200像素宽,则对于此组件在x维指定的相应约束是X3–X1=200。如果该组件在y维由网格线Y2和Y3指定并且高度必须在150到200像素之间,则可以使用两个相应的约束来指定行条件:Y2–Y3≥-200并且Y3-Y2≥150。
[0045] 在一些实施例中,可以指定具有一个维度或多于两个维度的组件和容器。然而,在每个维度上,可以使用一对数字来定义该维度内的开始位置和结束位置;从而,要指定N个维度的组件,可以使用2N个数字。
[0046] 然后可以利用线性编程或其他算法来解决该组约束。在一个实施例中,可将该组约束转换成相应的图。对于该图可以解决“单源路径长度问题”(single-source path-length problem)以确定每条网格线相对于源网格线的位置。单源路径长度问题的示例包括找出单个源节点与图中的其他节点之间的最短路径的“单源最短路径问题”和找出单个源节点与图中的其他节点之间的最长路径的“单源最长路径问题”。布局系统可使用这些位置来指定容器矩形内的网格线的位置,并且利用定位的网格线来生成容器矩形内的组件中的至少一些的显示。
[0047] 解决单源路径长度问题的一种算法是贝尔曼-福特(Bellman-Ford)算法。在本公开的一个方面中,这里公开的贝尔曼-福特算法变体的一种实现方式可以用O(|E|)的平均运行时间解决单源路径长度问题,其中|E|=该图中与该组约束相对应的弧(边缘)的数目。在一些特定方面中,图可以是有向图。在其他特定方面中,这里公开的贝尔曼-福特算法变体的实现方式可识别并去除图中表示无效约束的弧。
[0048] 布局系统接受布局的简化指定,这些简化指定不要求对灵活性约束的明确指定。(如上所述,组件的灵活性指的是组件的大小在至少一个维度上能够被调整多少以便将组件适配在组件的显示中)。在声明性系统和传统的面向对象的系统中,用户通常可以选择完全不声明重力。公开的系统可利用未定义的状态来推断组件在一行或列内的灵活性。如果为组件定义了水平或垂直对齐,则可以认为组件的灵活性是灵活的,因为已经定义了对于额外的空间会发生什么。在没有明确定义“重力”或者水平/垂直对齐的情况下,系统可作出相反的推断:单元的大小由其包含的组件——例如文本、按钮、显示等等——的大小固定,从而是不灵活的。在像这里描述的Space(空间)组件那样对于给定的组件没有指定大小的另一种情况下,可以认为给定的组件是灵活的。
[0049] 为了即使在行和列包含多个组件的情况下也进一步推断行和列的灵活性,可以部署以下两个化简规则:
[0050] 规则1:平行元素(例如,在列中对齐的元素)是灵活的,如果所有平行元素都是灵活的话。
[0051] 规则2:系列元素(例如,一行中的元素)是灵活的,如果该系列元素之一是灵活的话。通过去除对灵活性的明确指定,布局管理器简化了用户界面设计者和工具对布局的指定。
[0052] 布局管理器允许对于与不可见组件相关联的网格线放松行和列的正常顺序条件。正常顺序条件的放松在一些情况下可使得即使当容器矩形比正常顺序条件下所要求的更小时也能够完整显示用户界面。另外,在这里公开的实施例中,布局管理器利用高效的算法来迅速地操作,从而使能了用户界面的迅速的调整大小和重绘制操作。
[0053] 示例数据网络
[0054] 转到附图,图1示出了被配置为经由网络106与可编程设备104a、104b和104c通信的服务器设备108、110。网络106可对应于LAN、广域网(wide area network,WAN)、公司内联网、公共因特网、或者任何其他类型的被配置为在联网的计算设备之间提供通信路径的网络。网络106也可对应于一个或多个LAN、WAN、公司内联网和/或公共因特网的组合。
[0055] 虽然图1只示出了三个可编程设备,但分布式应用体系结构可为数十、数百或数千的可编程设备服务。另外,可编程设备104a、104b和104c(或任何额外的可编程设备)可以是任何种类的计算设备,例如普通的膝上型计算机、桌面型计算机、网络终端、无线通信设备(例如蜂窝电话或智能电话),等等。在一些实施例中,可编程设备104a、104b和104c可专用于软件应用的设计和使用。在其他实施例中,可编程设备104a、104b和104c可以是被配置为执行多个任务并且不需要专用于软件开发工具的通用计算机。
[0056] 服务器设备108、110可被配置为按照可编程设备104a、104b和/或104c的请求执行一个或多个服务。例如,服务器设备108和/或110可向可编程设备104a-104c提供内容。内容可包括但不限于网页、超文本、脚本、诸如编译的软件之类的二进制数据、图像、音频和/或视频。内容可包括压缩的和/或未压缩的内容。内容可被加密和/或解密。其他类型的内容也是可能的。
[0057] 作为另一示例,服务器设备108和/或110可向可编程设备104a-104c提供对用于数据库、搜索、计算、图形、音频、视频、万维网/因特网利用和/或其他功能的软件的访问。服务器设备的许多其他示例也是可能的。
[0058] 计算设备体系结构
[0059] 图2A是根据示例实施例的计算设备(例如系统)的框图。具体地,图2A所示的计算设备200可被配置为执行服务器设备108、110、网络106和/或可编程设备104a、104b和104c中的一个或多个的一个或多个功能。计算设备200可包括用户接口201、网络通信接口模块202、一个或多个处理器203和数据存储装置204,所有这些都可经由系统总线、网络或其他连接机制205链接在一起。
[0060] 用户接口模块201可操作来向外部用户输入/输出设备发送和/或从外部用户输入/输出设备接收数据。例如,用户接口模块201可被配置为向用户输入设备发送和/或从用户输入设备接收数据,用户输入设备例如是键盘、小键盘、触摸屏、计算机鼠标轨迹球、操纵杆、相机、语音识别模块和/或其他类似的设备。用户接口模块201还可被配置为向用户显示设备提供输出,用户显示设备例如是一个或多个阴极射线管(cathode ray tube,CRT)、液晶显示器(liquid crystal display,LCD)、发光二极管(light emitting diode,LED)、使用数字光处理(digital light processing,DLP)技术的显示器、打印机灯泡和/或现在已知或以后开发的其他类似设备。用户接口模块201还可被配置为生成可听输出,例如扬声器、扬声器插孔、音频输出端口、音频输出设备、机和/或其他类似的设备。特别地,具有用户接口模块201的计算设备200可用于显示用户界面,该用户界面包括容器矩形内的一个或多个组件。
[0061] 网络通信接口模块202可包括一个或多个无线接口207和/或一个或多个有线接口208,这些无线接口207和有线接口208可配置为经由网络通信,例如图1所示的网络106。无线接口207可包括一个或多个无线发送器、接收器和/或收发器,例如蓝牙收发器、Zigbee收发器、Wi-Fi收发器、WiMAX收发器、和/或可配置为经由无线网络通信的其他类似类型的无线收发器。有线接口208可包括一个或多个有线发送器、接收器和/或收发器,例如以太网收发器、通用串行总线(Universal Serial Bus,USB)收发器、或者可配置为经由双绞线、同轴电缆、光纤链路或到有线网络的类似物理连接来通信的类似的收发器。
[0062] 在一些实施例中,网络通信接口模块202可被配置为提供可靠的、安全的和/或经认证的通信。对于这里描述的每个通信,可以提供用于确保可靠通信的信息(有保证消息递送),可能作为消息头部和/或尾部的一部分提供(例如,分组/消息排序信息、封装头部和/或尾部、大小/时间信息、以及诸如CRC和/或奇偶校验值之类的传输验证信息)。可以利用一个或多个密码协议和/或算法来对通信加以保护(例如编码或加密)和/或解密/解码,这些密码协议和/或算法例如但不限于是DES、AES、RSA、Diffie-Hellman和/或DSA。除了这里列出的那些之外也可使用其他密码协议和/或算法来对通信进行保护(然后进行解密/解码)。
[0063] 处理器203可包括一个或多个通用处理器和/或一个或多个专用处理器(例如,数字信号处理器、专用集成电路,等等)。处理器203可被配置为执行包含在数据存储装置204中的计算机可读程序指令206a和/或如这里所述的其他指令。
[0064] 数据存储装置204可包括可被至少一个处理器203读取和/或访问的一个或多个计算机可读存储介质。一个或多个计算机可读存储介质可包括易失性和/或非易失性存储组件,例如光学、磁性、有机或者其他存储器或盘存储装置,它们可以全部或部分与至少一个处理器203集成。在一些实施例中,数据存储装置204可利用单个物理设备(例如,一个光学、磁性、有机或其他存储器或盘存储单元)来实现,而在其他实施例中,数据存储装置204可利用两个或更多个物理设备来实现。
[0065] 数据存储装置204可包括计算机可读程序指令206a、实际环境206b以及可能额外的数据。实际环境206b可存储被软件应用的一个或多个进程和/或线程使用的数据中的至少一些。在一些实施例中,数据存储装置204还可包括执行这里描述的方法和技术的至少一部分和/或这里描述的设备和网络的功能的至少一部分所需要的存储装置。
[0066] 基于云的服务器
[0067] 图2B描绘了根据示例实施例布置为基于云的服务器系统的计算集群209a、209b、209c的网络106。服务器设备108和/或110可以是存储基于云的应用和/或服务的程序逻辑和/或数据的基于云的设备。在一些实施例中,服务器设备108和/或110可以是驻留在单个计算中心中的单个计算设备。在其他实施例中,服务器设备108和/或110可包括单个计算中心中的多个计算设备,或者甚至在位于多个不同地理位置的多个计算中心中的多个计算设备。例如,图1描绘了服务器设备108和110中的每一个驻留在不同的物理位置。
[0068] 在一些实施例中,服务器设备108和/或110处的数据和服务可被编码为存储在有形计算机可读介质(或计算机可读存储介质)中并可被可编程设备104a、104b和104c和/或其他计算设备访问的计算机可读信息。在一些实施例中,服务器设备108和/或110处的数据可存储在单个盘驱动器或其他有形存储介质上,或者可实现在位于一个或多个不同地理位置的多个盘驱动器或其他有形存储介质上。
[0069] 图2B描绘了根据示例实施例的基于云的服务器系统。在图2B中,服务器设备108和/或110的功能可分布在三个计算集群209a、209b和209c之间。计算集群209a可包括由本地集群网络212a连接的一个或多个计算设备200a、集群存储阵列210a和集群路由器211a。类似地,计算集群209b可包括由本地集群网络212b连接的一个或多个计算设备200b、集群存储阵列210b和集群路由器211b。类似地,计算集群209c可包括由本地集群网络212c连接的一个或多个计算设备200c、集群存储阵列210c和集群路由器211c。
[0070] 在一些实施例中,计算集群209a、209b和209c中的每一个可具有相等数目的计算设备、相等数目的集群存储阵列和相等数目的集群路由器。然而,在其他实施例中,每个计算集群可具有不同数目的计算设备、不同数目的集群存储阵列和不同数目的集群路由器。每个计算集群中的计算设备、集群存储阵列和集群路由器的数目可取决于指派给每个计算集群的一个或多个计算任务。
[0071] 例如,在计算集群209a中,计算设备200a可被配置为执行电子通信服务器112的各种计算任务。在一个实施例中,电子通信服务器112的各种功能可分布在计算设备200a、200b和200c中的一个或多个之间。计算集群209b和209c中的计算设备200b和200c可与计算集群209a中的计算设备200a类似地来配置。另一方面,在一些实施例中,计算设备200a、
200b和200c可被配置为执行不同的功能。
[0072] 在一些实施例中,与服务器设备108和/或110相关联的计算任务和存储数据可至少部分基于服务器设备108和/或110的处理要求、计算设备200a、200b和200c的处理能力、每个计算集群中的计算设备之间和计算集群本身之间的网络链路的延迟和/或可对整个系统体系结构的成本、速度、容错、弹性、效率和/或其他设计目标作出贡献的其他因素,来分布在计算设备200a、200b和200c上。
[0073] 计算集群209a、209b和209c的集群存储阵列210a、210b和210c可以是数据存储阵列,这些数据存储阵列包括被配置为管理对硬盘驱动器群组的读取和写入访问的盘阵列控制器。盘阵列控制器单独地或者与其各自的计算设备相联合也可被配置为管理集群存储阵列中存储的数据的备份或冗余拷贝,以针对可妨碍一个或多个计算设备访问一个或多个集群存储阵列的盘驱动器或其他集群存储阵列故障和/或网络故障加以保护。
[0074] 与服务器设备108和/或110的功能分布在计算集群209a、209b和209c的计算设备200a、200b和200c上的方式类似,这些组件的各种活动部分和/或备份部分可分布在集群存储阵列210a、210b和210c上。例如,一些集群存储阵列可被配置为存储服务器设备108的数据,而其他集群存储阵列可存储服务器设备110的数据。此外,一些集群存储阵列可被配置为存储其他集群存储阵列中存储的数据的备份版本。
[0075] 计算集群209a、209b和209c中的集群路由器211a、211b和211c可包括被配置为为计算集群提供内部和外部通信的联网设备。例如,计算集群209a中的集群路由器211a可包括一个或多个互联网交换和路由设备,这些设备被配置为提供:(i)计算设备200a与集群存储阵列210a之间经由本地集群网络212a的局域网通信,以及(ii)计算集群209a与计算集群209b和209c之间经由到网络106的广域网连接213a的广域网通信。集群路由器211b和211c可包括与集群路由器211a类似的网络设备,并且集群路由器211b和211c可为计算集群209b和209c执行与集群路由器211a为计算集群209a执行的类似的联网功能。
[0076] 在一些实施例中,集群路由器211a、211b和211c的配置可至少部分基于计算设备和集群存储阵列的数据通信要求、集群路由器211a、211b和211c中的网络设备的数据通信能力、本地网络212a、212b、212c的延迟和吞吐量、广域网链接213a、213b和213c的延迟、吞吐量和成本、和/或可对适当系统体系结构的成本、速度、容错、弹性、效率和/或其他设计目标作出贡献的其他因素。
[0077] 示例布局
[0078] 图3根据一实施例描绘了关于示例用户界面310的场景300。定义可利用诸如计算设备200之类的计算设备显示的用户界面310的示例布局在以下表1中示出。
[0079]
[0080]
[0081] 表1
[0082] 表1是定义被称为“GridLayout”(网格布局)的布局的扩展标记语言(eXtended Markup Language,XML)文档。一般地,XML文档包括根元素和根元素的零个或更多个子元素。XML根元素或子元素包括至少一个标签,并且可具有开始标签、内容和结束标签。开始标签具有的形式,其中标签(tag)是XML(子)元素的名称,并且attrib1和attrib2是修改和/或提供关于XML(子)元素的信息的可选属性。内容在开始标签之后开始。结束标签划定内容的结束,并且通常被表示为。
[0083] GridLayout根元素可用于定义利用网格线来在网格矩形内放置组件的用户界面。表1的GridLayout根元素开始和结束标签在以下表1.1中单独示出。
[0084]
[0085] 表1.1
[0086] 如表1.1所示,GridLayout开始标签经由统一资源定位符(Uniform Resource Locator,URL)指定XML命名空间,并指定数个参数。这些参数包括用于指定以下各项的参数:布局宽度和高度、默认边距、对齐模式、行顺序保留、以及列数目。行顺序保留参数设定为等于“假”表明允许布局管理器在某些条件下对于布局的行放松正常顺序约束。在表1和表1.1的示例中,列的数目被设定为4。在其他实施例中,可指定更多或更少的参数作为GridLayout元素的一部分。GridLayout结束标签在表1的最末行示出并且被复制为表1.1的最末行。
[0087] 在GridLayout开始标签和结束标签之间的是内容,其定义了GridLayout元素的子元素。在表1所示的示例中,GridLayout根元素具有九个子元素:四个TextView子元素、两个EditText子元素、两个Button子元素和一个Space子元素。为了简单起见,表1.1用省略号来替换了这些子元素。在一些示例中,例如在用户界面310中,GridLayout元素可用于指定用户界面的容器矩形的属性,而GridLayout元素的子元素可用于指定用户界面的组件的属性。
[0088] TextView子元素可用于指定在用户界面(例如用户界面310)中要显示的文本。表1中的GridLayout元素的第一TextView子元素在以下表1.2中单独示出:
[0089]
[0090] 表1.2
[0091] 如表1.2所示,TextView子元素的标签可指定文本、文本大小、列“跨度”或者TextView子元素占据的列的数目,以及“重力”参数。在此示例中,文本是“Email setup”(电子邮件设置),文本大小是32密度无关像素(density-independent pixel,dip),并且列跨度中的列的数目如此组件的columnSpan参数所指定是4。在其他示例中,可以指定行和/或列数目,可以指定行跨度,并且对于文本大小可使用不同于dip单位的其他单位;例如,字体点、像素、ems、英寸、厘米和/或其他适当的单位。
[0092] 重力参数控制组件在单元群组内的放置。在表1.2的示例中,重力是“center_horizontal”(水平居中),表明此TextView子元素的文本“Email setup”在该单元群组内将水平居中。其他示例水平重力值包括“top”(靠上)、“bottom”(靠下)、伸展组件以完全占满单元群组内的空间的“fill_horizontal”(水平填充),以及沿着“基线”对齐组件的文本的“baseline”(基线)。基线是如下的假想线:给定字体中的大部分字母“坐”在该假想线上,并且该假想线下方被字体中的字母的下降部分(例如,字母“p”的尾部)使用。利用示例单词“dog”,字母“d”和“o”的底部和字母“g”的顶部圆圈在基线上,而字母“g”的尾部则下降到基线下方。
[0093] 在一些示例中,作为对水平重力值的取代或附加,可以使用垂直重力值。示例垂直重力值包括“left”(靠左)、“center_vertical”(垂直居中)、“right”(靠右)和“fill_vertical”(垂直填充)。另外,可同时指定水平和垂直重力值,例如指定layout_gravity="center_horizontal"以用于在单元群组内水平居中,并且指定layout_gravity="center_vertical"以用于在单元群组内垂直居中,从而使组件在单元群组内水平和垂直都居中。
[0094] GridLayout元素可与行和列的网格相关联。网格可至少部分由GridLayout元素来指定。在表1和表1.1所示的示例中,GridLayout元素利用columnCount参数指定在网格中有四列。另外,子元素可指定部分或整个网格;例如,通过指定开始、跨越和/或结束列和行。
[0095] EditText子元素可用于许可经由用户界面(例如用户界面310)输入文本。表1中的GridLayout元素的第一EditText子元素在以下表1.3中单独示出。
[0096]
[0097] 表1.3
[0098] 表1.3所示的EditText子元素具有一个参数“ems”,其指定用于输入文本的文本输入区域的大小。在此示例中,文本输入区域的大小是10“ems”。ems是相对于特定字体的点大小定义字母的单位;例如,用于输入文本到文本输入区域中的点大小和字体。在其他示例中,可按除“ems”以外的其他单位来提供文本输入区域的大小;例如,dip单位、像素、字体点、ems、英寸、厘米和/或其他适当的单位。
[0099] Space(空间)子元素可用于允许指定用户界面(例如用户界面310)的不可见组件。在一些实施例中,当被渲染为用户界面的一部分时,Space子元素是透明的,不对用户界面事件(例如,点击、叩击、鼠标悬停、捏拉手势,等等)作出反应,并且不能具有孩子。另一方面,非Space组件可对一些用户界面事件作出反应。这样,与Space子元素相对应的组件的实现可消耗比非Space组件更少的系统资源。
[0100] 表1中的GridLayout元素的Space子元素在以下表1.4中单独示出。
[0101]
[0102]
[0103] 表1.4
[0104] 因为Space组件是常规组件,所以其就像非Space组件那样可具有被指定为参数的属性。表1.4所示的Space子元素具有四个参数:指定Space组件的GridLayout网格的开始行的“layout_row”,指定Space组件占据的GridLayout网格的行数目的“rowSpan”,指定Space组件的GridLayout网格的开始列的“layout_column”,以及其值为“fill”(填充)以指定垂直填充的“layout_gravity”参数。基于指定的开始行2和行跨度3,Space组件将在用户界面的列2中占据行2、3和4。
[0105] 通过使得用于Space组件的微件(widget)从与用于非Space组件的微件共同的超类继承,Space组件可在现有的布局策略中获取自动支持。例如,Space组件可实现为在用户界面内使用的微件的基本类/共同超类的子类。继续此示例,布局管理器利用的所有组件可具有基本类或共同超类Component。Component类可具有与所有组件微件相关的方法和/或数据,例如用于行、行跨度、列、列跨度、灵活性、重力和网格线的数据和/或方法,并且许多其他示例也是可能的。
[0106] Component类可具有子类,例如用于Space组件相关微件的SpaceComponent和具有可见组件方法和数据的用于非Space组件相关微件的VisibleComponent。示例Space组件方法和数据包括文本相关数据/方法、图形对象相关数据/方法、按钮相关数据/方法。示例可见组件方法和数据包括文本相关数据/方法、图形对象相关数据/方法、按钮相关数据/方法,并且子类、方法和数据的许多其他示例也是可能的。
[0107] Space组件可在多个布局策略上统一空间的原理。具体地,在GridLayout中,Space组件可用于指定在用户界面内何处插入空间以及当容器矩形被调整大小时该空间应当有何种行为。
[0108] 另外,具有指定的重力的Space组件——例如表1.4中定义的Space组件——是灵活组件。这样,可按照布局管理器的要求来更改Space组件的大小。例如,假定Space组件(或其他灵活组件)在一容器矩形内,该容器矩形的大小恰好匹配用于显示用户界面310的显示窗口。然后,假定该显示窗口被用户调整大小以增长或收缩。响应于显示窗口被调整大小,布局管理器可调整诸如Space组件之类的灵活组件的大小,使得用户界面310尽可能最佳地适配在调整大小后的显示窗口内。例如,Space组件的一个或多个大小可随着显示窗口增长而增大,或者随着显示窗口收缩而减小。
[0109] 在一些实施例中,Space组件可用于在GridLayout内指定额外的网格线。在一些场景中,额外的网格线可违反正常顺序条件,因为它们涉及不可见组件。这样,当容器矩形小于预定的大小时,网格线可允许重叠行和/或列。关于重叠行的示例,参见图6B的用户界面610a和下文的论述。
[0110] Button(按钮)子元素可用于指定用户界面(例如用户界面310)的按钮。表1中的GridLayout元素的第一Button子元素在以下表1.5中单独示出:
[0111]
[0112] 表1.5
[0113] 表1.3所示的Button子元素具有三个参数:“Manual setup”的“text”(文本),其是要显示在用户界面310中的按钮上的文本;“layout_row”,其指定Button子元素的GridLayout网格的开始行;以及“layout_column”,其指定Button子元素的GridLayout网格的开始列。基于指定的“layout_row”和“layout_column”,如表1.5中指定的Button组件将开始于用户界面310的行5、列3。
[0114] 在其他示例中,与表1至表1.5所示相比,GridLayout元素可具有更多、更少和/或不同的子元素。相应地,在这些其他示例中,用户界面310可具有与图3所示相比更多、更少和/或不同的组件。在其他实施例中,可利用除XML以外的其他技术来指定GridLayout。
[0115] 图3示出了具有文本320和322的用户界面310,文本320和322分别对应于表1的第一和第二TextView子元素。由于每个TextView子元素跨越用户界面310的所有四列,所以每个子元素在单独的一行中示出。
[0116] 文本324对应于表1的第三TextView子元素——由于此TextView子元素不包括“columnSpan”参数的指定,所以使用1列的默认列跨度。然后,表1中指定的下一个子元素——表1的第一EditText子元素——在图3中被示为文本324右边的文本输入(text entry,TE)区域326。
[0117] 表1随后指定与文本328相对应的第四TextView子元素,其如利用layout_column参数所指定的开始于开始列“0”,并且使用1列的默认列跨度。从而,由于文本328开始于列0,所以文本328开始于文本324下方的行。然后,表1中指定的下一个子元素——表1的第二EditText子元素——在图3中被示为文本328右边的文本输入(TE)区域330。
[0118] 表1以Space子元素继续,Space子元素如上所述将占据用户界面的列2的行2、3和4。由于表1从0开始对行和列编号,所以该Space子元素将占据相应用户界面中的第三列的第三、第四和第五行。如图3所示,空间332(为了清晰起见用交叉阴影线指示)占据用户界面
310的第三列的第三、第四和第五行。用户界面310的第五行在图3的顶部被示为文本328和文本输入区域330下方的空间332的扩展。在一些实施例中,空间组件是不可见的,从而不具有交叉阴影线或者对于是用户界面(例如用户界面310)的一部分的任何其他可见指示。
[0119] 表1结束于分别与按钮334和336相对应的两个Button子元素。与按钮334相对应的Button子元素指示出该按钮具有文本“Manual setup”(手动设置)并且被定位在GridLayout的行5、列3中;也就是说在用户界面310的第六行和第四列中;就在空间332下方右侧。最后,与按钮336相对应的Button子元素指示出该按钮具有文本“Next”(下一步)并且被定位在GridLayout的列3中,这是用户界面310的第四列。由于按钮334已经在用户界面310的第六行中占据第四列,所以图3示出了按钮336在用户界面310的下一行或者说第七行中占据第四列。
[0120] 图3的底部示出了用户界面310的行和列和相应的网格线(grid line,GL)。网格线是分隔GridLayout元素内和相应用户界面中的行和列的线。图3示出了具有七行340-346和四列350-353的用户界面310。每一行由两条网格线定义:例如,图3示出了行340在上方由网格线Y0限界并且在下方由网格线Y1限界。类似地,每一列由两条网格线定义:例如,图3示出了列352在左侧由网格线X2限界并且在右侧由网格线X3限界。
[0121] 图4根据一实施例示出了场景300继续确定与布局内的组件相对应的约束,并且确定与约束相对应的图。
[0122] 图4的顶部基于用户界面310描绘了网格400。图4示出了网格400如图3所示并且更具体而言基于以上表1中指定的GridLayout元素和子元素包括网格线X0-X4和Y0-Y7。图4还示出了被描绘为灰色矩形的一组组件(C)402-418,它们对应于用户界面310的组件320-336。例如,网格400的组件402对应于用户界面310的文本320,因为文本320和组件402都在最顶行并且都跨越了用户界面310(对于文本320而言)或网格400(对于组件402而言)的所有列。
[0123] 表2示出了图3所示的用户界面组件与全在图4中示出的网格组件、约束和图440中的边缘之间的对应关系。
[0124]用户界面组件 网格组件 约束 图440中的边缘
文本320 组件402 约束422 边缘442
文本322 组件404 约束424 边缘444
文本324 组件406 约束426 边缘446
文本输入区域326 组件408 约束428 边缘448
文本328 组件412 约束432 边缘452
文本输入区域330 组件414 约束434 边缘454
空间332 组件410 约束430 边缘450
按钮334 组件416 约束436 边缘456
按钮336 组件418 约束438 边缘458
[0125] 表2
[0126] 网格400的每一行和列与用户界面310的行和列一样是由两条网格线定义的。对于行示例,图4示出了网格400的第一行在上方由网格线Y0限界并且在下方由网格线Y1限界。作为列示例,图4示出了网格400的最右列在左侧由网格线X3限界并且在右侧由网格线X4限界。
[0127] 每个组件可以为其被渲染在显示器上时的一个或多个大小确定数值,并将这些数值传递给布局管理器。对于文本子元素的示例,可以确定按像素或其他单位的子元素的宽度和高度。在一些实施例中,宽度和高度值可基于要显示的文本、用于显示文本子元素的文本的字体和字体大小、使用的文本特征(例如,下划线、粗体,等等)。作为一个示例,72点的文本可被渲染在1英寸的水平文本内,或者在按96像素/英寸显示文本的显示设备上,可被渲染在96个水平像素内。在特定实施例中,布局管理器可向文本添加边距,这相应地增大了文本组件的数值高度和/或宽度值。
[0128] 特别地,根据需要可以重新表述用户界面310的矩形之间的间距要求,从而使得在图4的网格400的组件402-418之间没有过多的空间。然而,如图4所示,网格400的组件402-418中的一些或全部可以部分或完全地重叠。
[0129] 图4示出了网格400的每个组件402-418具有以像素为单位的相应宽度;例如,用户界面组件320的文本和相应的网格组件402被布局管理器确定为适配在宽度为160像素的组件内。在图4未示出的一些场景中,每个组件402-418也可具有以像素为单位的相应高度。在一些实施例中,可以按不同于像素的其他单位来指定组件大小,例如但不限于高度和/或宽度。如图4所示,网格400具有一组垂直网格线{X0,X1…X4}和一组水平网格线{Y0,Y1…Y7}。在其他场景中,网格400可只具有一组网格线(例如,只有垂直网格线)或者具有多于两组网格线(例如,垂直、水平和深度网格线)。
[0130] 布局问题的水平和垂直方面可被分开,从而允许对于行的网格线的位置和列的网格线的位置的独立计算。由于布局问题的水平和垂直方面是独立的,所以此时只描述对于列的网格线的位置的计算以简化场景300。参见以下关于图6C-6E和对行的网格线的位置的计算的论述。
[0131] 这样,网格400的每个组件402-418具有至少四个属性:
[0132] 1.最小宽度(可为零)。
[0133] 2.最小高度(可为零)。
[0134] 3.来自该组网格线{X0...X4}的与组件的左边缘和右边缘对齐的两条网格线。
[0135] 4.来自该组网格线{Y0...Y7}的与组件的顶边缘和底边缘对齐的两条网格线。
[0136] 一旦已为用户界面310和相应网格400的每个组件确定了这些属性,就确定与该组垂直网格线{X0,X1,X2,…}和水平网格线{Y0,Y1,Y2,…}的每条网格线相对应的一组数值,以使得每个孩子组件至少具有其请求的那么多的空间。
[0137] 由于每个组件具有最小宽度并且与和该组件的左右边缘对齐的两条网格线相关联,所以可确定与这些属性相对应的约束。例如,网格400示出了与网格线X0对齐的组件402的左边缘、与网格线X4对齐的组件402的右边缘以及160像素的像素值(在组件402的中间示出),表明组件402至少有160像素宽。由于组件402跨越网格400的宽度,所以组件402在左边缘与网格线X0对齐并且在右边缘与网格线X4对齐。这些条件对应于约束422“X4–X0≥160”像素。
[0138] 作为另一示例,网格400示出了组件414的左边缘与网格线X1对齐,组件414的右边缘与网格线X2对齐,以及130像素的像素值(在组件414的中间示出),表明组件414至少有160像素宽。组件414的这些条件对应于约束434“X2–X1≥130”像素。
[0139] 图4的中间部分示出了一组约束422-438。约束422-438中的每个约束对应于网格400的每个组件402-418。作为另一示例,与组件410相对应的约束430表明组件410的右边缘(X3)的位置必须大于或等于组件410的左边缘(X2)的位置。在其他场景中,例如下文在图6C和6D的上下文中论述的那些场景中,对于网格400的该组水平网格线{Y0…Y7}可确定类似的约束。
[0140] 对于每组约束,可确定一图,其中节点对应于网格线并且边缘对应于网格线上的约束。图4的底部示出了图440,其中节点被示为灰色圆。图440对于每条垂直网格线X0、X1、X2、X3和X4具有一个节点。图440还具有与约束420相对应的边缘442-458。图440中的边缘442-458中的每一个与约束422-438具有一一对应关系。如上所述,每个约束422-438对应于网格400中的一组件402-418。例如,如以上表2所示,边缘444对应于组件404和约束424两者。
[0141] 由于X0网格线的位置可被预定为在原点,例如X0=0,所以图440的节点X0可被指定为“源”节点。在正常顺序条件下,所有垂直网格线都具有在X0右侧的位置,于是所有网格线X0…X4的位置最初都可被假定为是非负的。另外,由于为了解决布局问题必须确定每个位置X0…X4,从而,可向图440的每个节点X0…X4赋予一值,该值对应于从源节点X0去到该节点所需的以像素为单位的最大距离。
[0142] 贝尔曼-福特算法的变体可在图440上操作以确定网格400中以及相应地用户界面310中的每个组件所指定的一个维度上的最大大小。贝尔曼-福特算法变体可用于通过基于相应图的边缘的值向除源节点以外的每个节点赋予表示从源到每个相应节点的收益的值来解决单源最长路径问题。由于贝尔曼-福特算法变体评估图的边缘,所以可以调整节点的值来确定(a)该图有解,或者(b)在该图上有导致“正环”的边缘。如果该图有解,则给定节点处的值对应于源节点与该给定节点之间的最长路径的收益。
[0143] 在解决单源最长路径问题时,贝尔曼-福特算法最初将源节点的值设定为0并且将剩余节点值设定为无效值,例如+∞或-∞。在一些实施例中,贝尔曼-福特算法变体可将所有节点值初始化为一共同值,例如0。在这些实施例中,这相当于将所有节点连接到其值被设定为0的合成源节点并且从该合成源节点到所有节点的边缘的边缘权重全都等于该共同值。
[0144] 图5示出了对于所有节点X0至X4使用共同值0的初始图500。也就是说,初始图500被把所有节点值初始化为共同值0的贝尔曼-福特算法变体所初始化。
[0145] 当节点值不再变化时中止的贝尔曼-福特算法的变体的伪代码在以下表3中给出。表3示出了一种solve方法,其取两个参数:与图的边缘相对应的弧的列表(arcs),以及与图的节点相对应的位置的列表(locations)。该solve方法进而调用relax函数来确定节点值是否应当被更新。
[0146]
[0147]
[0148] 表3
[0149] 更详细地说,solve方法具有以i为索引的遍历图的节点(locations)的外层循环。对于外层循环的每次迭代,执行内层循环以遍历图的边缘(arcs)并且经由对relax方法的调用来跟踪取当前边缘(arcs[j])是否会更新图的节点值。
[0150] relax方法确定边缘-源节点的值(locations[u])加上当前边缘的权重(value)的candidate值是否将会增大当前边缘-目的地节点的值(locations[v])。如果当前边缘-目的地节点的值将会增大,则locations[v]值被设定到candidate值,并且返回true值(表明节点值已被更新)。如果当前边缘-目的地节点的值不会增大,则locations[v]值不变,并且返回false值,表明节点值没有被更新。
[0151] 在solve方法中,“changed=changed|relax(…);”这个赋值表明最初被设定为逻辑FALSE的changed布尔值的值与relax函数的返回值进行逻辑或运算。也就是说,只要relax函数返回逻辑FALSE值,changed值就将保持为逻辑FALSE。然而,一旦relax函数返回逻辑TRUE值,changed值就将被设定到逻辑TRUE并且在solve方法的内层循环的剩余迭代期间始终保持为逻辑TRUE。
[0152] 然后利用内层循环总共达|V|-1次遍历图的边缘的列表,其中|V|是图中的节点(顶点)的数目。贝尔曼-福特算法可终止于“有效”结果,如果在额外一遍经过边缘的列表时没有节点值被更新的话;或者终止于“无效”,如果在该额外一遍期间更新了至少一个节点值的话。仅当正环是图的一部分时,该至少一个节点值才被更新。从而,贝尔曼-福特算法取O(|V|*|E|)个指令,其中|E|是边缘的数目。
[0153] 加权有向图上的单源最长路径问题等同于已有很多研究的加权有向图上的单源最短路径问题。可如下证明该等同性:给定包括链接顶点V的一组有向弧A的加权有向图G=(V,A);构造加权图G'=(V,A'),其中对于A'中的所有弧a'和A中的所有弧a:
[0154] source(a')=source(a),
[0155] destination(a')=destination(a),并且
[0156] weight(a')=-weight(a)。
[0157] G中的最小路径是G'中的最大路径,反之亦然。为具有正权重和负权重两者的弧解决最短路径问题的诸如贝尔曼-福特之类的算法可被部署来解决最长路径问题。这种使用可通过对图中的所有权重取负或者把以下表3所示的relax函数中使用的开始条件和比较符从“<”改变成“>”来实现。在算法未被修改的情况下,其终止条件不受影响。在算法被修改的情况下,终止条件相应地改变以反映其所操作的取负的图的属性。被修改来解决单源最长路径问题的贝尔曼-福特算法变体在其输入不包含正权重循环或“正环”的情况下终止。
[0158] 正环涉及从第一节点N1经过一个或多个其他节点N2….Nm返回到N1的路径,其中沿着该环的边缘权重的总和大于0,例如正权重路径。正环的每次遍历可提高从源节点沿着正环行进到一个或多个节点的收益或者说节点值。由于正环的每次遍历会提高至少一些节点的值,所以不能确定从源节点行进到所有其他节点的最大收益,从而如以上表3所示的贝尔曼-福特算法变体将不会解决单源最长路径问题。
[0159] 图5示出了示例最终图540,例如可由solve方法确定的那种。图5示出了节点X0具有最终值0,节点X1具有值100,X2和X3各自具有值260,并且X4具有值360。
[0160] 图6A示出了场景300继续进行用户界面(UI)610的显示。用户界面610利用为最终图540确定的节点值来显示用户界面310的组件。具体地,文本组件320和322被示为在从原点起0像素处的网格线X0和从原点起360像素处的X4之间对齐,并且文本组件324和328被示为在0像素处的网格线X0和100像素处的X1之间对齐。文本输入区域326和330被示为在从原点起100像素处的网格线X1和从原点起260像素处的X2之间对齐。空间组件332在图6A中未被示为用户界面610的一部分,因为空间组件332是不可见组件。按钮334和336被示为在从原点起260像素处的网格线X3和从原点起360像素处的X4之间对齐。
[0161] 场景300继续将用户界面610的宽度减小50像素,得到总共310像素的减小后宽度。例如,用户界面610的用户可以把包含用户界面310的窗口从至少360像素宽收缩到310像素宽。图6A示出了包括空间组件332在内的所有组件具有非负宽度的用户界面610的宽度是
360像素。
[0162] 图6B的顶部示出了调整大小后的用户界面610a,其具有宽度310像素和重叠的网格线X0–X4。从图6B的顶部可见,在用户界面610a中,网格线X3与网格线X4一起在从网格线X0起310像素处的最右边缘处示出。这样,图6B示出了按钮334和336已被截短,因为用户界面610a的310像素宽度太小以至于不能示出包括按钮334和336的列的整个宽度。
[0163] 按钮334和336被截短是因为:(1)该布局对于列不允许违反正常顺序(例如,表1和表1.1不具有诸如columnOrderPreserved(列顺序保留)="false"(假)之类的参数设定),以及(2)用户界面610a的包含按钮334和336的第四列具有不灵活组件,因此使得该列不灵活。
[0164] 表1示出了布局的与按钮334相对应的部分如下:
[0165]
[0166] 如上所述,在没有明确定义“重力”或水平/垂直对齐的情况下,例如以上对按钮334所示的那样,布局管理器可推断出组件是不灵活的。另外,如果一列中的所有元素都是灵活的,则布局管理器推断出在该列中对齐的元素是灵活的。由于按钮334是不灵活组件,所以布局管理器推断出用户界面610a的第四列是不灵活的,因此具有固定宽度。从而,当用户界面610a的宽度太小以至于不能示出用户界面610a的第四列的整个宽度时,布局管理器可部分或完全地截短按钮334和336的显示。
[0167] 场景300继续将用户界面610a的宽度增大90像素,得到总共400像素的宽度。例如,用户界面610a的用户可将包含用户界面610a的窗口从310像素宽扩大到400像素宽。
[0168] 图6B的底部示出了调整大小后的用户界面610b,其具有宽度400像素和重叠的网格线X0–X4。从图6B的底部可看出,在用户界面610b中,网格线X3在网格线X2的右侧示出;也就是说,用户界面610b的网格线被恢复到正常顺序。
[0169] 从图6B可见,对于用户界面610a和610b两者,文本组件324和328被“向左对齐”或与各自的用户界面610a或610b的最左边缘对齐,并且按钮334和336被“向右对齐”或与各自的用户界面610a或610b的最右边缘对齐。组件324和328的向左对齐和组件334和336的向右对齐都是通过将空间332从用户界面610a的-50像素的负宽度调整到用户界面610b的40像素的正宽度来实现的。
[0170] 通过允许空间组件灵活,对于以上表1中指定的GridLayout元素和子元素的布局问题的解决方案可保持关键特征,例如向左对齐和向右对齐。
[0171] 图6C、6D和6E根据示例实施例示出了基于对图3的示例用户界面的高度约束的示例用户界面。
[0172] 图6C的顶部基于用户界面310描绘了网格620。图6C示出了网格620如图3所示并且更具体而言基于以上表1中指定的GridLayout元素和子元素包括网格线X0-X4和Y0-Y7。图6C还示出了被描绘为灰色矩形的一组组件(C)402-418,它们对应于用户界面310的组件
320-336。
[0173] 表4示出了图3所示的用户界面组件与全在图6C中示出的网格组件、高度约束和图650中的边缘之间的对应关系。
[0174]用户界面组件 网格组件 高度约束 图650中的边缘
文本320 组件402 约束632 边缘652
文本322 组件404 约束634 边缘654
文本324 组件406 约束636 边缘656
文本输入区域326 组件408 约束638 边缘658
文本328 组件412 约束632 边缘662
文本输入区域330 组件414 约束644 边缘664
空间332 组件410 约束640 边缘660
按钮334 组件416 约束646 边缘666
按钮336 组件418 约束648 边缘668
[0175] 表4
[0176] 特别地,根据需要可以重新表述用户界面310的矩形之间的间距要求,从而使得在图6C的网格620的组件402-418之间没有过多的空间。然而,如图6C所示,网格620的组件402-418中的一些或全部可以部分或完全地重叠。
[0177] 图6C示出了网格400的每个组件402-418具有以像素为单位的相应高度;例如,用户界面组件320的文本和相应的网格组件402被布局管理器确定为适配在高度为30像素的组件内。如图6C所示,网格620具有一组垂直网格线{X0,X1…X4}和一组水平网格线{Y0,Y1…Y7}。在其他场景中,网格400可只具有一组网格线(例如,只有垂直网格线)或者具有多于两组网格线(例如,垂直、水平和深度网格线)。
[0178] 这样,网格400的每个组件402-418具有至少四个属性:
[0179] 1.最小宽度(可为零)。
[0180] 2.最小高度(可为零)。
[0181] 3.来自该组网格线{X0...X4}的与组件的左边缘和右边缘对齐的两条网格线。
[0182] 4.来自该组网格线{Y0...Y7}的与组件的顶边缘和底边缘对齐的两条网格线。
[0183] 由于每个组件具有最小高度并且与和该组件的顶边缘和底边缘对齐的两条网格线相关联,所以可确定与这些属性相对应的约束。例如,网格620示出了与网格线Y0对齐的组件402的顶边缘、与网格线Y1对齐的组件402的底边缘以及30像素的像素值(在组件402的中间示出),表明组件402至少有30像素高。这些条件对应于约束632“Y1-Y0≥30”像素。
[0184] 作为另一示例,网格400示出了组件414的顶边缘与网格线Y3对齐,组件414的底边缘与网格线Y2对齐,以及12像素的像素值(在组件414的中间示出),表明组件414至少有12像素高。组件414的这些条件对应于约束644“Y4–Y3≥12”像素。
[0185] 图6C的中间部分示出了一组约束632-648。约束632-648中的每一个对应于网格620的组件402-418之一。作为另一示例,与组件410相对应的约束640表明组件410的底边缘(Y5)的位置必须大于或等于组件410的顶边缘(Y2)的位置。然而,由于组件410是灵活组件,所以此约束可允许对于居间的网格线Y3和Y4放松正常顺序条件,例如以下在图6D的上下文中论述的那样。
[0186] 对于每组约束,可确定一图,其中节点对应于网格线并且边缘对应于网格线上的约束。图6C的底部示出了图650,其中节点被示为灰色圆。图650对于每条水平网格线Y0-Y7具有一个节点。图650还具有与约束630相对应的边缘(E)652-668。图650的每个边缘652-668对应于约束632-648之一,并且如上所述,每个约束632-648对应于网格620的一组件
402-418。例如,如以上表4所示,边缘654对应于组件404和约束634两者。
[0187] 由于Y0网格线的位置可被预定为在原点,例如Y0=0,所以图650的节点Y0可被指定为上述贝尔曼-福特算法的变体的源节点。贝尔曼-福特算法的变体可在图650上操作以确定网格620中以及相应地用户界面310中的每个组件所指定的最大高度。
[0188] 图6D通过应用贝尔曼-福特算法的变体520来确定为图650解决单源最长路径问题的节点值来继续场景300。图6D示出了具有如下节点值的最终图670:对于Y0为0,对于Y1为30,对于Y2为45,对于Y3为60,对于Y4为75,对于Y5为45,对于Y6为63,并且对于Y7为78。可以认为这些节点值是在布局用户界面680a时网格线Y0至Y7的像素值。
[0189] 从以上表1和表1.1回忆到,GridLayout元素的行顺序保留参数被设定为等于“假”以表明布局管理器被允许为布局的行放松正常顺序约束。从而,由于(a)相应的组件和列是灵活的,并且(b)布局允许对于行排序违反正常顺序条件,所以布局管理器可允许对于行违反正常顺序条件。
[0190] 此外,回忆到组件410是灵活组件。因为布局管理器被允许对于行放松正常顺序条件,所以只要与组件410相关联的约束得到满足,布局管理器就被允许交换行。与组件410相关联的约束640指出Y5-Y2必须大于或等于零。从而,如最终图650中所示,节点Y2和Y5的节点值等于和被设定为45像素。然而,节点Y3和Y4的节点值分别为60和75像素,这大于节点Y5的节点值,从而违反了正常顺序条件。然而,由于Y3和Y4对于组件410是居间的网格线——也就是说,不出现在与组件410有关的约束中的网格线,所以如果满足以下条件,则对于居间的网格线可以违反正常顺序条件:(a)相应的组件和列(对于高度而言)或行(对于宽度而言)是灵活的,以及(b)布局允许在期望的方向上违反正常顺序条件。
[0191] 另外,从以上表1和表1.4回忆到,空间组件410的layout_gravity被指定为“fill”;从而,可以指定垂直方向上的重力。由于为组件410指定了重力,所以布局管理器可推断出组件410是灵活的。由于组件410是灵活的并且是用户界面300的第三列中的唯一组件,所以第三列是灵活的列。
[0192] 图6D示出了与违反了正常顺序条件的最终图670相对应的相应用户界面680a。也就是说,图6D示出了按钮334的行与文本324和文本输入区域326的行重叠,并且示出了按钮336的行与文本328和文本输入区域330的行重叠。另外,网格线Y4(在75像素处)和Y5(在45像素处)之间的行高度为负——这个行高度是-30像素,表明对于Y4与Y5之间的行违反了正常顺序条件。
[0193] 场景300继续进行将用户界面680a的高度伸展到123像素高的调整大小操作。这样,图6D示出了四行中的每一行在没有重叠的情况下分别显示:(i)文本324和文本输入区域326(,ii)文本328和文本输入区域330(,iii)按钮334,以及(iv)按钮336。在调整大小后,用户界面680a在与文本328/文本输入区域330的行的底部相对应的网格线Y4和与按钮334的行的顶部相对应的网格线Y5之间具有18像素的空间。
[0194] 在附图中未示出的场景中,将用户界面680a的高度收缩到78像素高的调整大小操作将导致用户界面680a中按钮334和336的行与文本324和文本输入326以及文本328和文本输入330各自的行重叠。从而,去除正常顺序约束允许了一些网格线之间的负间距,并且允许了布局问题的解决方案具有重叠的行、列等等。
[0195] 虽然图6C和6D所示的示例涉及行,但在附图中未示出的场景中,可在其他维度放松正常顺序约束以允许重叠和负宽度列、允许负宽度和重叠的沿着Z轴或深度轴的切割,以及对于其他维度的放松。
[0196] 图6E示出了图670b,其是图670的变化,其中对于行保留(即,没有违反)正常顺序条件。实施正常顺序的一种技术是向约束的系统添加并实施|V|个正常顺序约束。这|V|个正常顺序约束可具有以下形式:Y1-Y0≥0,Y2-Y1≥0,…Yi+1–Yi≥0,…Y|V|-Y|V|-1≥0,其中|V|-1>i>1(对于行而言),或者X1-X0≥0,X2-X1≥0,…Xi+1–Xi≥0,…X|V|-X|V|-1≥0,其中|V|-1>i>1(对于列而言)。然后,为了对于与行相关联的毗邻网格线的子集放松正常顺序,例如Yr1…Yr2,其中r1=第一放松网格线,并且r2是最末放松网格线,则可从约束的系统中去除相应的正常顺序约束Yr1+1-Yr1≥0,…Yr2-Yr2-1≥0。类似地,为了对于与列相关联的毗邻网格线的子集放松正常顺序,例如Xr1…Xr2,其中r1=第一放松网格线,并且r2是最末放松网格线,则可从约束的系统中去除相应的正常顺序约束Xr1+1-Xr1≥0,…Xr2-Xr2-1≥0。
[0197] 图6E示出了最终图670b,其是通过将Y4和Y5的节点值设定为等于75来保留了正常顺序的图6D的图670。另外,通过如下方式使节点值Y6和Y7相对于图670的有所更新:将Y4和Y5的节点值之间的先前差异30添加到Y6和Y7各自的节点值。图6E的用户界面680b使用来自图670b的节点值,其保留了正常顺序并且在图6E的底部示出。
[0198] 图7A和7B示出了具有示例网格710和相应的约束730、图750、最终图770和用户界面(UI)770的示例场景700,其中网格710中有一些组件的大小是利用范围指定的。
[0199] 在场景700中,用户界面310已被修改以去除文本组件328、文本输入区域330和按钮336。对于场景700,文本组件322和按钮334的指定也已被修改以按照像素的范围而不是利用固定像素量来指定宽度。这样,图7A的顶部示出了网格710,指出(:a)文本组件322的宽度被指定为像素值的范围300-400,(b)在网格710中没有关于文本组件328、文本输入区域330和按钮336的条目,以及(c)按钮334的宽度被指定为像素值的范围100-132。
[0200] 如上所述,文本组件322的宽度被指定为从最小300像素到最大400像素的像素值范围。文本组件从左侧的网格线X0跨越到右侧的网格线X4。从而,与文本组件322的这个宽度范围相对应的最小和最大约束为:
[0201] X4–X0≥300
[0202] X4–X0≤400
[0203] 为了在同一图上恰当地使用这两个约束,这两个约束应当是同一种不等式;即,为了使用单源最长路径算法,两个约束都必须被写成大于“>”或者大于等于“≥”符号的,或者为使用了单源最短路径算法,两个约束都必须被写成小于“<”或者小于等于“≤”符号的。
[0204] 为了使用单源最长路径算法,通过取不等式两侧的负值,可将“X4–X0≤400”不等式改写为使用大于等于符号:“X0–X4≥-400”。继续场景700,图7A的中间示出了与网格710相对应的约束730。具体地,网格710的组件714已被转化成两个约束:约束734a,其中X4–X0≥300,以及约束734b,其中X0–X4≥-400。另外,组件726已被转化成两个约束:约束746a,其中X4–X3≥100,以及约束746b,其中X3–X4≥-132。
[0205] 取代无向图可使用有向图(或者“digraph”)。在表征两个顶点A和B之间的边缘的边缘成本时,可以容纳两个或更多个数字(或权重),而不是一个。有向图允许了如下的图:其中,从A行进到B的成本或收益可不同于从B行进到A的成本或收益,例如当组件——例如组件714或组件726——具有位于最小值和最大值之间的大小时。
[0206] 图7A的底部包括与约束730相对应的图750。具体地,边缘754a和754b对应于相应的约束734a和734b,并且边缘766a和766b对应于相应的约束746a和746b。两个边缘754b和766b都可被分类为“反向边缘”,因为这些边缘中的每一个的目的地节点与每个边缘的源节点相比与更小的标注相关联。例如,边缘754b具有标注为X0的目的地节点,这小于源节点的标注X4。另外,边缘754b和766b具有负边缘权重;对于边缘754b,边缘权重是-400,并且对于边缘766b,边缘权重是-132。与之不同,剩余边缘可被分类为“正向边缘”,因为这些边缘中的每一个的目的地节点与每个边缘的源节点相比与更大的标注相关联。
[0207] 图7B通过应用贝尔曼-福特算法的变体来确定为图750解决单源最长路径问题的节点值来继续场景700。图7B示出了具有如下节点值的图770:对于X0为0,对于X1为100,对于X2和X3为260,并且对于X4为360。可以认为这些节点值是在布局用户界面780时网格线X0至X4的像素值。
[0208] 图7B在底部示出了场景700继续显示用户界面(UI)780。用户界面780显示了用户界面310的被选择来包括并且调用网格710的约束以及利用为最终图770确定的节点值的组件。具体地,文本组件320和322被示为在从原点起0像素处的网格线X0和从原点起360像素处的X4之间对齐,并且文本组件324被示为在0像素处的网格线X0和100像素处的X1之间对齐。文本输入区域326被示为在从原点起100像素处的网格线X1和从原点起260像素处的X2之间对齐。空间组件332在图7B中未被示为用户界面770的一部分,因为空间组件332是不可见组件。按钮334被示为在从原点起260像素处的网格线X3和360像素处的X4之间对齐。
[0209] 可靠的贝尔曼-福特变体
[0210] 一些布局导致相互不一致的约束集合。桌面系统上的一个示例可以是将窗口收缩到如下大小:该大小小于将所有包含的组件以其最小大小显示所必要的大小。标准贝尔曼-福特算法可检测此条件,但在此情况下会报告失败,而不返回可使用的解决方案。
[0211] 可通过修改图以去除可导致不一致的边缘并因此去除可导致不一致的约束,来修改约束解决器的合约以指定在诸如不一致的约束之类的不一致的情况下的期望行为。经修改的贝尔曼-福特算法的以下伪代码可在不一致约束的情况下操作:
[0212] 0.把提供给经修改的贝尔曼-福特算法的图的边缘放入有序列表中。该有序列表内的边缘的顺序可指示出与优先级相关联的约束,其中较高优先级的边缘在列表中先于较低优先级的边缘。另外,将布尔元凶值(culprit value)Ci与图的每个边缘Ei相关联,该值指示出在边缘Ei上操作的以上表3的贝尔曼-福特算法的relax函数在贝尔曼-福特算法的执行期间的任何时点是否返回了逻辑TRUE值。Ci值可被初始化到逻辑FALSE。“列表”一词的使用并不暗示着特定的数据结构;更确切地说,可被配置为执行这里描述的关于有序列表的动作的任何数据结构都可用作有序列表的数据结构。
[0213] 例如,考虑图4的图440。图440具有9个边缘,其中每个边缘442-458与各自的约束422-438相关联。然后,将边缘442-458放入有序列表中,其中有序列表中的第一边缘是图
440的最高优先级边缘,有序列表中的第二边缘是图440的第二高优先级边缘,依此类推,直到有序列表中的第九边缘为图440的最低优先级边缘。九个边缘中的每一个可与最初被设定到FALSE的元凶值Ci相关联,其中i的范围是1到9。
[0214] 1.初始化提供给经修改的贝尔曼-福特的图中的每个节点值,对于所有节点使用共同值0。
[0215] 2.运行贝尔曼-福特算法。
[0216] 3.如果贝尔曼-福特算法报告成功,则退出。
[0217] 4.将每个元凶值Ci设定为FALSE。
[0218] 5.在不重新初始化节点值的情况下再次运行贝尔曼-福特算法,并且当在边缘Ei上操作的以上表3的贝尔曼-福特算法的relax函数返回逻辑TRUE值时,将元凶值Ci永久地设定为TRUE,表明边缘Ei曾被用来更新节点值。
[0219] 6.找出相应的元凶值CLV被设定为TRUE的最大值LV。然后,对于找到的最大值LV,将边缘ELV作为元凶边缘从图中去除。在一些实施例中,可向软件和/或硬件组件提供信号,指出与元凶边缘ELV相对应的用户界面约束被去除。在一些场景中,去除的用户界面约束可与显示用户界面的窗口的大小有关。例如,去除的用户界面约束可指示出显示窗口太小以至于不能示出整个用户界面,这可能触发窗口大小的变化、滚动条的添加或者某个其他动作。其他信号和/或动作也是可能的。
[0220] 7.从步骤1起重复。
[0221] 8.结束。
[0222] 更快速的贝尔曼-福特变体
[0223] 为了提高以上表3中所示的贝尔曼-福特算法的变体的性能,在调用solve方法之前可对边缘(arcs)的列表进行拓扑排序。边缘E的列表的拓扑排序是图G的节点N的列表的一种排序,其使得如果边缘E(u,v)是从节点u到节点v的边缘,其中u,v在N中,则在节点N的列表的排序中u位于v之前。
[0224] 例如,对于图5的初始图500和最终图540,顶点的一个列表是{X0,X1,X2,X3,X4}。从而,图500或540的边缘的示例拓扑排序列表可以是{E(X0,X1,100),E(X0,X1,80),E(X1,X2,160),E(X1,X2,130),E(X2,X3,0),E(X0,X4,160),E(X0,X4,300),E(X3,X4,100),E(X3,X4,50)},其中E(u,v,v’)是图500或540的从节点u到节点v的具有值v’的边缘。边缘的其他拓扑排序列表也是可能的。
[0225] 边缘的列表可被分割成两个部分:包括所有正向边缘并且只包括正向边缘的正向边缘部分,以及包括所有反向边缘并且只包括反向边缘的反向边缘部分。当对边缘的列表进行拓扑排序时,可以分别对每个部分进行拓扑排序。也就是说,正向边缘部分的正向边缘和反向边缘部分的反向边缘可被分别进行拓扑排序。然后,在分别拓扑排序之后,两个部分可被重合并为边缘的列表。重合并的边缘列表可被排序,以使得正向边缘部分中的每个边缘在反向边缘部分的所有边缘之前。从而,反向边缘在边缘的列表中具有更高的索引。
[0226] 然后,通过对经拓扑排序的边缘列表进行处理,solve方法通常利用外层循环的两次迭代为图中的所有节点确定节点值:一次迭代让内层循环基于经拓扑排序的边缘列表确定节点值,并且第二次迭代让内层循环确定节点值没有变化。当节点值在内层循环的迭代期间没有变化时,solve方法的changed变量将是逻辑FALSE,从而将利用break语句来终止外层循环。
[0227] 通常,当利用分开的正向和反向边缘部分来执行表3所示的solve方法并且每个部分被分别拓扑排序时,solve方法将采取恒定数目的外层循环迭代。如上所述,每个外层循环迭代要求内层循环的O(|E|)次迭代。由于每个内层循环涉及O(1)个指令,所以内层循环的O(|E|)次迭代要花O(|E|)个指令。从而,表3所示的利用分开的正向和反向边缘部分并且每个部分被分别拓扑排序的solve方法通常将需要O(|E|)个指令。
[0228] 示例操作
[0229] 图8–图15是示出各种示例实施例的流程图。这些实施例可涉及计算设备和/或由计算设备执行,例如图1所示的可编程设备或服务器设备、图2A所示的计算设备和/或图2B所示的计算集群。可在以上图3–图7B的论述的上下文中理解这些实施例的描述。
[0230] 图8是根据示例实施例的方法800的流程图。方法800开始于块810,在这里计算设备可接收布局。该布局可被配置为指定容器矩形内的至少一组矩形组件。每个矩形组件可具有至少一个维度上的至少一个大小。
[0231] 在块820,计算设备可从布局确定多条网格线。该组矩形组件中的每个矩形组件可与这多条网格线中的至少两条网格线相关联。这至少两条网格线可基于该矩形组件的至少一个大小。
[0232] 在一些实施例中,布局可被配置为指定至少一空间组件作为该组矩形组件中的组件。在其他实施例中,布局可被配置为指定该组矩形组件中的至少一个矩形组件的灵活性。在其他实施例中,布局可被配置为指定至少一GridLayout元素。
[0233] 在块830,计算设备可生成约束的系统。约束的系统的每个约束可与多条网格线中的至少两条网格线相关。
[0234] 在块840,计算设备可解决约束的系统。计算设备可为多条网格线中的每条网格线确定该网格线的位置。
[0235] 在一些实施例中,解决约束的系统以为多条网格线中的每条网格线确定该网格线的位置包括(:a)利用标注来标注多条网格线中的每条网格线,(b)基于标注来对多条网格线排序;以及(c)基于多条网格线的排序利用网格线的正常排序,例如以上在至少图6A和6B的上下文中论述的那样。
[0236] 在其他实施例中,该组组件包括不可见组件。在这些其他实施例中,解决约束的系统以为多条网格线中的每条网格线确定该网格线的位置包括:(a)确定与不可见组件相关联的两条或更多条网格线,以及(b)至少对于与不可见组件相关联的两条或更多条网格线,放松网格线的正常排序,例如以上在至少图6A和6B的上下文中论述的那样。
[0237] 在一些实施例中,解决约束的系统以为多条网格线中的每条网格线确定该网格线的位置包括(:a)生成包括多个节点和多个边缘的图,其中多个节点对应于多条网格线,并且多个边缘对应于约束的系统,以及(b)对于该图解决单源路径长度问题以确定网格线的位置。
[0238] 在一些实施例中,对于该图解决单源路径长度问题以确定网格线的位置可包括利用贝尔曼-福特算法的变体解决单源路径长度问题。
[0239] 在一些实施例中(:a)图可以是有向图,(b)多个边缘中的至少第一边缘和第二边缘可分别与约束的系统的第一约束和第二约束相关联,(c)第一约束和第二约束两者可与该组矩形组件中的单个矩形组件相关联,(d)第一约束可包括对于该单个矩形组件的关于最小值的约束,(e)第二约束可包括对于该单个矩形组件的关于最大值的约束,并且(f)第一边缘的方向可不同于第二边缘的方向,例如以上在至少图7A和7B的上下文中论述的那样。
[0240] 在特定实施例中,方法800可包括:(g)将多个边缘分成至少第一部分边缘和第二部分边缘,其中第一边缘在第一部分中,第二边缘在第二部分中,第一部分中的每个边缘的方向是第一边缘的方向,并且第二部分中的每个边缘的方向是第二边缘的方向,(h)对第一部分边缘进行拓扑排序,(i)与第一部分边缘分开地,对多个边缘的第二部分进行拓扑排序,以及(j)利用在经拓扑排序的第一部分边缘和经拓扑排序的第二部分边缘上操作的贝尔曼-福特算法的变体解决单源路径长度问题,如上所述。
[0241] 在更特定的实施例中,利用在经拓扑排序的第一部分边缘和经拓扑排序的第二部分边缘上操作的贝尔曼-福特算法的变体解决单源路径长度问题包括(:k)生成多个边缘的排序,其中经拓扑排序的第一部分边缘中的每个边缘先于经拓扑排序的第二部分边缘中的每个边缘;(l)基于多个边缘的排序生成至少包括经拓扑排序的第一部分边缘和经拓扑排序的第二部分边缘的有序的多个边缘;以及(m)利用在有序的多个边缘上操作的贝尔曼-福特算法的变体来解决单源路径长度问题。
[0242] 在更特定的实施例中,利用在有序的多个边缘上操作的贝尔曼-福特算法的变体来解决单源路径长度问题包括:(n)在使用贝尔曼-福特算法的变体之后,确定在约束的系统中有一个或多个不一致约束,(o)识别有序的多个边缘中的与一个或多个不一致约束相对应的一个或多个元凶边缘;以及(p)把一个或多个元凶边缘中排序最高的元凶边缘从有序的多个边缘中去除。
[0243] 在其他实施例中,对于该图解决单源路径长度问题以确定网格线的位置包括利用贝尔曼-福特算法的变体解决单源路径长度问题。利用贝尔曼-福特算法的变体解决单源路径长度问题可包括在调用贝尔曼-福特算法的变体之前对多个边缘的至少一部分进行拓扑排序。
[0244] 在块850,计算设备可基于网格线的位置生成该组矩形组件中的至少一些矩形组件的显示。
[0245] 在一些实施例中,计算设备可显示该组矩形组件中的至少一些矩形组件的显示。在一些实施例中,生成了该组矩形组件中的至少一些矩形组件的显示的计算设备可在与该计算设备相关联的显示器上显示该组矩形组件中的至少一些矩形组件。在其他实施例中,生成了该组矩形组件中的至少一些矩形组件的显示的计算设备可将该显示发送到另一计算设备以便该另一计算设备在与该另一计算设备相关联的显示器上显示。
[0246] 图9是根据示例实施例的方法900的流程图。方法900开始于块910,在这里计算设备可接收用户界面布局。用户界面布局可被配置为指定至少第一矩形组件和第二矩形组件,两者都在容器矩形内。第一矩形组件可具有在水平或垂直维度上的第一大小,并且第二矩形组件可具有在水平或垂直维度上的第二大小。
[0247] 在一些实施例中,第一矩形组件可具有第一大小和第三大小,其中第一大小是在水平维度上的,并且第三大小是在垂直维度上的。
[0248] 在块920,计算设备可基于用户界面布局确定多条网格线。第一矩形组件可与多条网格线中的第一组至少两条网格线相关联,并且第二矩形组件可与多条网格线中的第二组至少两条网格线相关联。
[0249] 在一些实施例中,基于用户界面布局确定多条网格线可包括基于第一大小确定多条网格线中的第一组至少两条网格线,并且基于第三大小确定多条网格线中的第三组至少两条网格线。
[0250] 在块930中,计算设备可生成约束的系统。约束的系统中的第一约束可与第一组至少两条网格线相关,并且约束的系统中的第二约束可与第二组至少两条网格线相关。
[0251] 在一些实施例中,约束的系统可包括水平约束系统和垂直约束系统。在特定实施例中,水平约束系统可包括基于第一组至少两条网格线的至少一个约束,并且垂直约束系统可包括基于第三组至少两条网格线的至少一个约束。
[0252] 在块940,计算设备可解决约束的系统以为第一组和第二组网格线中的各条网格线确定各条网格线各自的位置。
[0253] 在一些实施例中,解决约束的系统包括:(a)生成包括多个节点和多个边缘的图,其中多个节点对应于多条网格线,并且多个边缘对应于约束的系统,以及(b)利用贝尔曼-福特算法的变体来对于该图解决单源路径长度问题以确定网格线的位置。
[0254] 在其他实施例中,解决约束的系统包括:(c)解决水平约束系统以确定多个水平位置,以及(d)解决垂直约束系统以确定多个垂直位置。在特定实施例中,解决水平约束系统包括独立于垂直约束系统地解决水平约束系统。在其他特定实施例中,多个水平位置包括第一组至少两条网格线中的各条网格线的位置,并且多个垂直位置包括第三组至少两条网格线中的各条网格线的位置。
[0255] 在块950,计算设备可基于各条网格线各自的位置生成包括第一和第二矩形组件的用户界面显示。
[0256] 在一些实施例中,生成包括第一和第二矩形组件的用户界面显示包括生成如下用户界面显示:在该用户界面显示中,第一组件的水平位置基于第一组至少两条网格线中的网格线的位置并且垂直位置基于第三组至少两条网格线中的网格线的位置。
[0257] 在块960,计算设备可显示该用户界面显示。
[0258] 图10是根据示例实施例的方法1000的流程图。方法1000开始于块1010,在这里计算设备可接收布局。该布局可被配置为指定容器矩形内的至少一组矩形组件。每个矩形组件可具有至少一个维度上的至少一个大小。
[0259] 在一些实施例中,该组矩形组件中的特定矩形组件可至少具有特定组件高度和特定组件宽度。在特定实施例中,该特定矩形组件还至少具有特定组件深度。
[0260] 在其他特定实施例中,多条网格线可包括多条水平网格线和多条垂直网格线。特定矩形组件可与多条水平网格线中的与该特定组件高度相关的至少两条水平网格线相关联。特定矩形组件可与多条垂直网格线中的与该特定组件宽度相关的至少两条垂直网格线相关联。约束的系统可包括与多条水平网格线相对应的水平约束的系统和与多条垂直网格线相对应的垂直约束的系统。
[0261] 在更具体的实施例中,生成图可包括:(a)生成与多条水平网格线和水平约束的系统相关联的第一图,以及(b)生成与多条垂直网格线和垂直约束的系统相关联的第二图。然后,对于该图解决单源路径长度问题可包括:(c)对于第一图解决第一单源路径长度问题以确定多条水平网格线的位置,以及(d)对于第二图解决第二单源路径长度问题以确定多条垂直网格线的位置。另外,生成显示可包括基于多条水平网格线的位置和多条垂直网格线的位置生成该组矩形组件中的至少一些矩形组件的显示。
[0262] 在块1020,计算设备可从布局确定多条网格线。该组矩形组件中的每个矩形组件可与这多条网格线中的至少两条网格线相关联。这至少两条网格线可基于该矩形组件的至少一个大小。
[0263] 在块1030,计算设备可生成约束的系统。约束的系统的每个约束可与多条网格线中的至少两条网格线相关。
[0264] 在块1040,计算设备可生成包括多个节点和多个边缘的图。每个节点可与节点值相关联。多个节点可对应于多条网格线。多个边缘可对应于约束的系统。
[0265] 在一些实施例中(:a)图可以是有向图,(b)多个边缘中的至少第一边缘和第二边缘可分别与约束的系统的第一约束和第二约束相关联,(c)第一约束和第二约束两者可与该组矩形组件中的单个矩形组件相关联,(d)第一约束可包括对于该单个矩形组件的关于最小值的约束,(e)第二约束可包括对于该单个矩形组件的关于最大值的约束,并且(f)第一边缘的方向可不同于第二边缘的方向。
[0266] 在块1050,计算设备可对多个边缘进行拓扑排序。
[0267] 在特定实施例中,对多个边缘进行拓扑排序可包括:(a)将多个边缘分成至少第一部分边缘和第二部分边缘,其中第一边缘在第一部分中,第二边缘在第二部分中,第一部分中的每个边缘的方向是第一边缘的方向,并且第二部分中的每个边缘的方向是第二边缘的方向,(b)对第一部分边缘进行拓扑排序。
[0268] 在块1060,计算设备可通过对于图解决单源路径长度问题来确定网格线的位置。可利用被配置为结合经拓扑排序的多个边缘进行操作的贝尔曼-福特算法的变体来解决单源路径长度问题。
[0269] 在一些实施例中,利用被配置为结合经拓扑排序的多个边缘进行操作的贝尔曼-福特算法的变体对于该图解决单源路径长度问题可包括利用在经拓扑排序的第一部分边缘和经拓扑排序的第二部分边缘上操作的贝尔曼-福特算法的变体解决单源路径长度问题。
[0270] 在特定实施例中,利用在经拓扑排序的第一部分边缘和经拓扑排序的第二部分边缘上操作的贝尔曼-福特算法的变体解决单源路径长度问题可包括(:a)生成多个边缘的排序,其中经拓扑排序的第一部分边缘中的每个边缘先于经拓扑排序的第二部分边缘中的每个边缘;(b)基于多个边缘的排序生成至少包括经拓扑排序的第一部分边缘和经拓扑排序的第二部分边缘的有序的多个边缘;以及(c)利用在有序的多个边缘上操作的贝尔曼-福特算法的变体来解决单源路径长度问题。
[0271] 在其他实施例中,被配置为结合经拓扑排序的多个边缘进行操作的贝尔曼-福特算法的变体可包括内层循环和外层循环。外层循环可被配置为遍历多个节点。内层循环可被配置为遍历与多个节点中的一节点相关联的多个边缘并且确定至少一个节点权重在遍历与该节点相关联的多个边缘期间是否变化了。在特定实施例中,外层循环可被配置为终止于确定至少一个节点权重在遍历与该节点相关联的多个边缘期间没有变化。
[0272] 在块1070,计算设备可基于网格线的位置生成该组矩形组件中的至少一些矩形组件的显示。
[0273] 在一些实施例中,计算设备可显示该组矩形组件中的至少一些矩形组件的显示。
[0274] 图11是根据示例实施例示出方法1100的流程图。方法1100开始于块1110,在这里计算设备可接收布局。该布局可被配置为指定容器矩形内的至少一组矩形组件。该组矩形组件中的每个矩形组件可具有至少一个维度上的至少一个大小。该组矩形组件可包括空间组件,该空间组件被配置为不可见并且被配置为不对用户界面事件作出反应。
[0275] 在块1120,计算设备可从布局确定多条网格线。该组矩形组件中的每个矩形组件可与这多条网格线中的至少两条相应的网格线相关联。这至少两条相应的网格线可基于该矩形组件的至少一个大小。
[0276] 在块1130,计算设备可生成约束的系统。约束的系统的各个约束可与多条网格线中的至少两条相应的网格线相关。
[0277] 在块1140,计算设备可解决约束的系统以为多条网格线中的每条网格线确定该网格线的位置。
[0278] 在一些实施例中,解决约束的系统可包括利用贝尔曼-福特算法的变体解决约束的系统。
[0279] 在块1150,计算设备可基于网格线的位置生成该组矩形组件中的至少一些矩形组件的显示。
[0280] 在一些实施例中,计算设备可显示各矩形组件中的至少一些,其中空间组件可被透明地显示。
[0281] 在其他实施例中,用户界面事件可包括点击、叩击、鼠标悬停和捏拉手势。
[0282] 在其他实施例中,空间组件是利用一个或多个参数来配置的。在特定实施例中,一个或多个参数包括行参数、列参数、重力参数及其组合。
[0283] 在其他实施例中,该组矩形组件中的每个组件可与一微件相关联。在特定实施例中,与该组矩形组件中的组件相关联的每个微件可继承自共同的超类。在更特定的实施例中,与空间组件相关联的微件可具有是该共同超类的子类的类。
[0284] 在一些实施例中,空间组件被配置为灵活组件。在特定实施例中,可接收对于对该组矩形组件中的至少一些矩形组件的显示进行调整大小的请求;并且响应于对显示进行调整大小的请求,灵活的空间组件可被调整大小。在更特定的实施例中,对灵活的空间组件进行调整大小包括对于灵活的空间组件放松正常顺序条件。在更特定的实施例中,显示可被调整大小,其中显示的至少一对行或列基于灵活的空间组件而重叠。
[0285] 图12是根据示例实施例的方法1200的流程图。方法1200开始于块1210,在这里可在计算设备处接收布局。该布局可被配置为指定容器矩形内的至少一组矩形组件。每个矩形组件可具有至少一个维度上的至少一个大小。
[0286] 在块1220,计算设备可从布局确定多条网格线。该组矩形组件中的每个矩形组件可与这多条网格线中的至少两条网格线相关联。这至少两条网格线可基于该矩形组件的至少一个大小。
[0287] 在一些实施例中,多条网格线可包括n+1条网格线Y0,Y1,…,Yn,其中n>0。n+1条网格线中的每一条可对应于对显示中的行的约束。在特定实施例中,一个或多个正常顺序约束可包括n+1个具有Yi+1–Yi≥0形式的约束,其中i是0到n-1之间包括0和n-1在内的整数。
[0288] 在其他实施例中,多条网格线可包括m+1条网格线X0,X1,…,Xm,其中m>0。m+1条网格线中的每一条可对应于对显示中的列的约束。在特定实施例中,一个或多个正常顺序约束可包括m+1个具有Xi+1–Xi≥0形式的约束,其中i是0到m-1之间包括0和m-1在内的整数。
[0289] 在块1230,计算设备可生成约束的系统。约束的系统可包括一个或多个正常顺序约束。约束的系统的每个约束可与多条网格线中的至少两条网格线相关。一个或多个正常顺序约束可指定多条网格线的正常顺序。
[0290] 在块1240,计算设备可解决约束的系统以为多条网格线中的每条网格线确定相应网格线的第一位置。
[0291] 在一些实施例中,解决约束的系统可包括利用贝尔曼-福特算法的变体来解决约束的系统。
[0292] 在块1250,计算设备可识别一个或多个正常顺序约束中的至少一个可放松的正常顺序约束。
[0293] 在块1260,计算设备可基于放松至少一个可放松的正常顺序约束来解决约束的系统以为多条网格线中的每条网格线确定该网格线的第二位置。对于多条网格线中的至少一条被放松的网格线,第二位置可不同于第一位置。
[0294] 在一些实施例中,至少一条被放松的网格线的第二位置可小于至少一条被放松的网格线的第一位置。
[0295] 在其他实施例中,放松至少一个可放松的正常顺序约束可包括把该至少一个可放松的正常顺序约束从约束的系统中去除。
[0296] 在特定实施例中,解决约束的系统可包括利用贝尔曼-福特算法的变体来解决约束的系统。
[0297] 在块1270,计算设备可基于网格线的第二位置来生成该组矩形组件中的至少一些矩形组件的显示。
[0298] 在一些实施例中,该组矩形组件中的至少一些矩形组件的显示可具有具有负高度的至少一行,其中具有负高度的至少一行与至少一条被放松的网格线相关联。在特定实施例中,显示中的至少两行可基于负高度而重叠。
[0299] 在其他实施例中,该组矩形组件中的至少一些矩形组件的显示可具有具有负宽度的至少一列,其中具有负宽度的至少一列与至少一条被放松的网格线相关联。在特定实施例中,显示中的至少两列可基于负宽度而重叠。
[0300] 在块1280,计算设备可显示该显示。
[0301] 图13是根据示例实施例的方法1300的流程图。方法1300开始于块1310,在这里可在计算设备处接收布局。该布局可被配置为指定容器矩形内的一组矩形组件。每个矩形组件可具有至少一个维度上的大小。每个矩形组件可被配置有重力参数。每个矩形组件可基于该矩形组件的重力参数被分类为灵活的或不灵活的。
[0302] 在一些实施例中,可对至少一个维度指定重力参数,并且在该至少一个维度上可将特定组件分类为灵活的。
[0303] 在其他实施例中,可在至少一个维度上不指定重力参数,并且在该至少一个维度上可将特定组件分类为不灵活的。
[0304] 在块1320,计算设备可从布局确定多条网格线。该组矩形组件中的每个矩形组件可与这多条网格线中的至少两条网格线相关联。这至少两条网格线可基于该矩形组件的至少一个大小。
[0305] 在块1330,计算设备可生成约束的系统。约束的系统的各个约束可与多条网格线中的至少两条相应的网格线相关。
[0306] 在块1340,计算设备可解决约束的系统以为多条网格线中的每条网格线确定该网格线的位置。
[0307] 在块1350,计算设备可基于各条网格线的位置来生成该组矩形组件中的至少一些矩形组件的显示,该组矩形组件中的至少一些矩形组件的用户界面显示可被生成。
[0308] 在一些实施例中,容器矩形可被划分成一列或多列。这一列或多列中的每一列可被分类为灵活的或不灵活的,并且可具有负的或非负的宽度。灵活的列可被配置为具有负的或非负的宽度,而非灵活的列可被配置为只具有非负的宽度。
[0309] 在特定实施例中,该组矩形组件的子集可对齐在该一列或多列中的特定列中。矩形组件的该子集中的每个组件可被分类为灵活的,并且该给定的列可被分类为灵活的。
[0310] 在其他特定实施例中,该组矩形组件的子集可对齐在该一列或多列中的特定列中。矩形组件的该子集中的至少一个矩形组件可被分类为不灵活的,并且该给定的列可被分类为不灵活的。
[0311] 在一些其他特定实施例中,该一列或多列中的至少一列可被分类为灵活的。该至少一个灵活列中的特定灵活列可具有负宽度。该一列或多列中的至少一些列可基于该特定灵活列而在显示上重叠。
[0312] 在其他实施例中,容器矩形可被划分成一行或多行。这一行或多行中的每一行可被分类为灵活的或不灵活的,并且可具有负的或非负的高度。灵活的行可被配置为具有负的或非负的高度,而非灵活的行可被配置为只具有非负的高度。
[0313] 在其他特定实施例中,该组矩形组件的子集可对齐在该一行或多行中的特定行中。矩形组件的该子集中的每个组件可被分类为不灵活的,并且该给定的行可被分类为不灵活的。
[0314] 在其他特定实施例中,该组矩形组件的子集可对齐在该一行或多行中的特定行中。矩形组件的该子集中的至少一个矩形组件可被分类为灵活的,并且该给定的行可被分类为灵活的。
[0315] 在其他特定实施例中,该一行或多行中的至少一行可被分类为灵活的。该至少一个灵活行中的特定灵活行可具有负高度。该一行或多行中的至少一些行可基于该特定灵活行而在显示上重叠。
[0316] 图14是根据示例实施例的示例方法1400的流程图。方法1400开始于块1410,在这里可在计算设备处接收布局。该布局可被配置为指定容器矩形内的至少一组矩形组件。每个矩形组件可具有至少一个维度上的至少一个大小。
[0317] 在块1420,计算设备可从布局确定多条网格线。该组矩形组件中的每个矩形组件可与这多条网格线中的至少两条网格线相关联。这至少两条网格线可基于该矩形组件的至少一个大小。
[0318] 在块1430,计算设备可生成约束的系统。约束的系统可包括最小约束和最大约束。最小约束可指定两条给定的网格线之间的最小距离,并且最大约束可指定两条给定的网格线之间的最大距离。
[0319] 在一些实施例中,最小约束和最大约束两者可与该组矩形组件中的单个矩形组件相关联。该单个矩形组件可与多条网格线中的第一网格线和多条网格线中的第二网格线相关联。在特定实施例中,最小约束可包括对于该单个矩形组件的关于最小值的约束,并且最大约束可包括对于该单个矩形组件的关于最大值的约束。
[0320] 在块1440,计算设备可解决约束的系统以为多条网格线中的每条网格线确定相应网格线的位置。
[0321] 在一些实施例中,解决约束的系统可包括:生成包括多个节点和多个边缘的图,其中多个节点对应于多条网格线,多个边缘对应于约束的系统,多个边缘中的至少最小边缘和最大边缘分别与约束的系统的最小约束和最大约束相关联,并且最小边缘具有第一方向,而最大边缘具有不同于第一方向的第二方向。在特定实施例中,多个节点中的第一节点对应于第一网格线,多个节点中的第二节点对应于第二网格线,最小边缘是从第一节点到第二节点的正向边缘,并且最大边缘是从第二节点到第一节点的反向边缘。
[0322] 在更特定的实施例中,解决约束的系统可包括:(a)为第一节点确定第一节点权重,(b)为第二节点确定第二节点权重,以及(c)确定在该最小值与该最大值之间的第二节点权重与第一节点权重之间的差异。
[0323] 在块1450,计算设备可基于网格线的位置来生成该组矩形组件中的至少一些矩形组件的显示。
[0324] 在一些实施例中,生成显示可包括基于第一节点权重来确定第一位置并基于第二节点权重来确定第二位置。然后,可在该显示中在第一位置和第二位置之间显示该单个矩形组件。
[0325] 在一些实施例中,方法1400可包括:将多个边缘分成至少第一部分边缘和第二部分边缘,其中最小边缘在第一部分中,最大边缘在第二部分中,第一部分中的每个边缘在第一方向上,并且第二部分中的每个边缘在第二方向上。
[0326] 在这些实施例中的特定实施例中,方法1400还可包括:(a)对第一部分边缘排序,(b)与第一部分边缘分开地对第二部分边缘排序,以及(c)合并第一部分边缘和第二部分边缘。在这些实施例中的更特定的实施例中,方法1400还可包括:生成多个边缘的排序,其中第一部分边缘中的每个边缘先于第二部分边缘中的每个边缘,并且合并第一部分边缘和第二部分边缘包括将第一部分边缘和第二部分边缘合并成边缘的合并列表,使得该合并列表中的第一部分中的每个边缘在该合并列表中先于第二部分边缘的所有边缘。在这些实施例中的更加特定的实施例中,解决约束的系统可包括利用在该合并列表上操作的贝尔曼-福特算法的变体来解决单源路径长度问题。
[0327] 图15是根据示例实施例的示例方法1500的流程图。方法1500开始于块1510,在这里可在计算设备处接收布局。该布局可被配置为指定容器矩形内的至少一组矩形组件。每个矩形组件可具有至少一个维度上的至少一个大小。
[0328] 在块1520,计算设备可从布局确定多条网格线。该组矩形组件中的每个矩形组件可与这多条网格线中的至少两条网格线相关联。这至少两条网格线可基于该矩形组件的至少一个大小。
[0329] 在块1530,计算设备可生成约束的系统。约束的系统的每个约束可与多条网格线中的至少两条网格线相关。约束的系统可包括不一致约束。
[0330] 在块1540,计算设备可生成包括多个节点和多个边缘的图。多个节点中的每个节点可与节点值相关联。多个节点可对应于多条网格线。多个边缘可对应于约束的系统。
[0331] 在块1550,可解决图的单源路径长度问题以确定网格线的位置。可利用被配置为结合不一致约束进行操作的贝尔曼-福特算法的变体来解决图的单源路径长度问题。
[0332] 在一些实施例中,贝尔曼-福特算法的变体还被配置为至少:(a)将图的多个边缘放入有序列表中,其中较高优先级的边缘在列表中先于较低优先级的边缘(,b)将多个节点的每个节点值初始化到共同值,(c)尝试在该图上解决单源路径长度问题;以及(d)确定该单源路径长度问题的成功结果是否出现。在这些实施例中的特定实施例中,响应于确定出现了成功结果,可退出贝尔曼-福特算法的变体。
[0333] 在块1560,计算设备可基于网格线的位置生成该组各矩形组件中的至少一些矩形组件的显示。
[0334] 在一些实施例中,生成显示可包括生成用于在窗口内显示的显示,其中显示具有一个或多个显示大小,窗口具有一个或多个窗口大小,并且一个或多个显示大小中的至少一个显示大小大于一个或多个窗口大小中的相应的至少一个窗口大小。在这些实施例中的特定实施例中,不一致约束中的至少一个对应于一个或多个显示大小中的大于一个或多个窗口大小中的相应的至少一个窗口大小的至少一个显示大小。
[0335] 在一些实施例中,方法1500还可包括,响应于确定成功结果没有出现:(a)将元凶值Ci与有序列表中的每个边缘Ei相关联,该元凶值Ci最初被赋予逻辑假值;(b)在不重新初始化多个节点的每个节点值的情况下尝试解决该图上的单源路径长度问题,并且在确定边缘Ei曾被用于更新多个节点中的一节点的节点值时向该边缘Ei的元凶值Ci赋予逻辑真值,(c)找出使得元凶值CLV为逻辑真值的最大值LV,以及(d)将边缘ELV从有序列表中去除。
[0336] 在这些实施例中的特定实施例中,方法1500还可包括:(e)将多个节点的每个节点值初始化到该共同值(,f)在去除了边缘ELV的情况下尝试解决该图上的单源路径长度问题,(g)确定在去除了边缘ELV的情况下在该图上是否出现单源路径长度问题的成功结果,以及(h)响应于确定在去除了边缘ELV的情况下在该图上出现单源路径长度问题的成功结果,退出贝尔曼-福特算法的变体。
[0337] 在这些实施例中的其他实施例中,方法1500还可包括:响应于将边缘ELV从有序列表中去除,生成对用户界面的信号。在其他特定实施例中,对用户界面的信号可被配置为向用户界面添加一个或多个滚动条。在其他特定实施例中,对用户界面的信号可被配置为改变用户界面的窗口大小。
[0338] 结论
[0339] 以上详细描述参考附图描述了所公开的系统、设备和方法的各种特征和功能。在附图中,相似的符号通常标识相似的组件,除非上下文另有指示。详细描述、附图和权利要求中描述的说明性实施例并不意欲进行限定。在不脱离这里给出的主题的精神或范围的情况下,可以利用其他实施例,并且可以进行其他改变。容易理解,这里概括描述并且在附图中示出的本公开的各方面可按许多种不同的配置来布置、替换、组合、分离和设计,所有这些在这里都明确地设想到了。
[0340] 关于如这里所述的附图中的梯形图、场景和流程图中的任何或全部,每个方块和/或通信可表示根据示例实施例对信息的处理和/或对信息的传输。替换实施例包括在这些示例实施例的范围内。在这些替换实施例中,例如,取决于所涉及的功能,被描述为方块的功能、传输、通信、请求、响应和/或消息可不按所示出或论述的顺序来执行,包括基本上同时执行或按相反顺序执行。另外,对于这里论述的梯形图、场景和流程图中的任何一个可以使用更多或更少的块和/或功能,并且这些梯形图、场景和流程图可部分或全部地与彼此组合。
[0341] 表示信息的处理的方块可对应于可被配置为执行这里描述的方法或技术的具体逻辑功能的电路。替换地或额外地,表示信息的处理的方块可对应于程序代码(包括相关数据)的模块、片段或部分。程序代码可包括可由处理器执行来实现方法或技术的具体逻辑功能或动作的一个或多个指令。程序代码和/或相关数据可被存储在任何类型的计算机可读介质上,例如包括盘或硬盘驱动器在内的存储设备或其他存储介质。
[0342] 计算机可读介质还可包括非暂态计算机可读介质,例如像寄存器存储器、处理器缓存和随机访问存储器(random access memory,RAM)那样短时间存储数据的计算机可读介质。计算机可读介质还可包括较长时间地存储程序代码和/或数据的非暂态计算机可读介质,例如次级或永久性长期存储装置,比如只读存储器(read only memory,ROM)、光盘或磁盘、致密盘只读存储器(compact-disc read only memory,CD-ROM)。计算机可读介质也可以是任何其他易失性或非易失性存储系统。计算机可读介质可被认为是例如计算机可读存储介质,或者有形存储设备。
[0343] 另外,表示一个或多个信息传输的方块可对应于同一物理设备中的软件和/或硬件模块之间的信息传输。然而,其他信息传输可发生在不同物理设备中的软件模块和/或硬件模块之间。
[0344] 虽然这里已公开了各种方面和实施例,但本领域技术人员将清楚其他方面和实施例。这里公开的各种方面和实施例是为了说明,而并不打算进行限定,真实的范围和精神由权利要求指示。
[0345] 本专利文献的公开的一部分包含受著作权保护的素材。著作权所有人不反对任何人对专利文献或专利公开以其出现在专利商标局文件或记录中的形式进行复制再现,但除此之外保留所有一切著作权权利。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈