布局助手

732
投票支持!

这是我为了满足一些布局需求而编写的几个模块。

“base”模块允许查询显示对象的各种坐标(左侧,中心,顶部等)。此外,它允许您根据这些属性放置对象,或相对于其他对象放置(将对象左对齐到x;将对象放置在内容的右下角;将对象1放置在对象2的右侧,加上一些位移;等等)。

在这些例程接受数字参数的地方,您还可以传入诸如“5%”,“ -1.7%”之类的字符串。就“5%”而言,对于x或y,这意味着屏幕宽度的5%,对于宽度或高度,则分别意味着屏幕宽度或高度的5%。

布局 DSL 模块建立在上述基础上,但在此基础上添加了一些(非常基本的)迷你语言。我自己的用例主要是允许将这些作为构建自定义小部件时的参数。

作为概念验证,我还允许将这些添加为显示对象的扩展属性,因此可以执行诸如“object.x =”40%“”,“object.left = object2.center_x”或“object.right =”from_right_align -3%“之类的操作。我自己还没有使用过,但它就在那里。

示例

我自己的 一些用法,因为写示例会花费很长时间...

调用在幕后使用DSL的构造函数:示例1

在幕后,它首先分配尺寸:示例2

以及位置:示例3

(有时宽度或高度在计算位置时会起作用,因此我首先解决这些问题。)

相对小部件:示例4

(锚点分配现在实际上是不必要的,但它先于这些模块。)

使用基于百分比的尺寸:示例5

更多DSL命令:示例6

已知问题/陷阱

  • 取决于您的对象是否为组,会存在一些不一致之处。在我的所有用例中,局部坐标和内容坐标都相同,但是显然,组不在(0,0)处是完全正常的。

  • 它的推论是,如果对象位于单独的组中,或者一个或两个对象都偏离(0,0),则相对于彼此计算对象将不可靠。

(最后两个可能并不难解决。)

  • layout.PutAtFirstHit() 尚未准备就绪,因此缺少文档。它应该尝试许多选项并选择第一个接受的选项,但目前我发现它的功能不够强大。我要么将其拆分以分别执行x和y,要么添加一堆选项。无论如何,那时,它可能属于DSL模块。

  • ProcessWidgetParams() 可能不是它应该有的样子,而文档实际上只描述了我迄今为止提出的内容。我只尝试了几个小部件,而且还没有经过测试,因此它只反映了这一点。

文档

这些既不漂亮也不令人兴奋,但这是当前文档,是从这些文档来源的项目中生成的

布局
布局 DSL

适用于 Corona 构建版本: 
2014.2511
贡献者: 
Star Crunch