报表用于存放若干单元, 这些单元属同一类控件。布局时,水平、垂直方向的单元间隔是同一个值,即水平方向间隔是8像素的话,垂直方向也只能是8像素。按是否可垂直扩展,分单行报表、多行报表。
单行报表/标签条
按钮全部放在一行,垂直方向上不可滚动,水平方向上,即使全单元的宽度超过屏幕尺寸,也不会用水平滚动条。以下是一些单行报表。

(这个控件叫:Segment Controls/分段控件(附录与Tabs的区别) - 知乎专栏)左侧是Tabs,右侧是分段控件。

一行放不下,可滚动Tabs

行放不下,用了“前翻”、“后翻”两个按钮。翻一次时翻整段。
它们有不同叫法,但都可用单行报表去实现。为方便,把单行报表称标签条,单元称标签。
- 标签条是单行报表。
- 按标签使用的控件分为按钮式标签和开关式标签。一标签条中标签必须或全是按钮或全是开关。
- 一次不能显示所有标签时,也不使用滚动条,按方法不同分为分段翻和滚动翻。分段翻是一次移动一段,一段指的是控件当前正显示的标签,滚动翻是鼠标拖着标签条翻。
- 分段翻要增加“前翻”、“后翻”两个按钮。即使当前不须要显示,依旧会给它们预留位置。
- 滚动翻中的标签可以不同宽度,分段翻中标签必须固定宽度。
多行报表
按报表控件可用宽度、单元宽度计算出一行可存放个数,当超过这个数目时会自动放到下一行。一旦这些行和起的行高超过控件高度,则会增加垂直滚动条。

日历,一个不带垂直滚动条的多行报表。
如何在脚本使用控件
脚本中unit_width、unit_height、gap是配置尺寸,显示时要乘上hdpi_scale。
[report] id = "access-hero" unit_width = 36 unit_height = 45 gap = 8 [/report]
定义了一个单行报表,控件中单元尺寸是36x45,单元间隔8像素。
[report] id = "calendar" unit_height = 33 multi_line=yes horizontal_scrollbar_mode="never" vertical_scrollbar_mode="never" [/report]
定义了一个多行报表,控件中单元高度固定33,宽度自适应,单元间隔0像素。
实现

单行报表的内容区控件支持不是等宽、等高,多行报表的内容区控件必须等宽且等高。
占位器作用可分为两种:1)在刷新时让继续画出占位器底下的那些控件,使得画出报表要求的背景。2)当此次内容区尺寸小于上一次时,让可擦除这两次内容区差别部分。
标签条为什么要有占位器A?当内容区控件不是等宽度,在此时出现删除一尺寸大的然后插入一尺寸小的时,该占位器可让避免在结尾出现刷不掉的差别部分。

相比多行报表,标签条多了一个计算隐藏/显示状态的步骤,该步骤需要start_参数,指示此次显示要略过多少个单元,这个数目不包括那些要隐藏的。下图直观显示了start_在显示单元和实际单元之间作用,灰度图像是要隐藏的单元。

(完)