变体用于为面板定义特定的视觉状态,从而使单个
面板可以具有多个不同的视觉表示形式,例如“已打开”或“已关闭”状态。使用 XML
配置变体。在 <Panel> 元素中使用
子标记。
每个 <Variant> 标记都有一个强制性 id 属性,用于唯一标识该标记。
该标记还可以引用父变体以继承属性。这种继承机制可以有效地为多个变体定义通用属性。
XML 属性
如需定义状态和转换,请将这些属性与 <TaskPanel> 或
<DecorPanel> 标记搭配使用。
| 属性 | 状态 | 说明 |
|---|---|---|
id |
强制 | 变体的唯一标识符。此 ID 用于在转换中引用
变体,或用作面板的 defaultVariant。
|
parent |
可选 | 指定当前变体应从中继承属性的另一个变体的 ID 。如果当前变体中未明确定义属性,则会回退到其父变体中定义的值。 |
XML 子元素
使用这些可选元素在面板处于此变体的状态时指定面板的视觉特征。
| 子元素 | 说明 |
|---|---|
<Visibility> |
指定面板是可见还是隐藏,并包含
isVisible 属性(布尔值)。 |
<Alpha> |
指定面板的透明度级别;包含
alpha 属性(浮点数,0.0 到 1.0)。 |
<Layer> |
设置面板相对于其他面板的 Z 轴顺序;包含
layer 属性(整数)。值越大,绘制在顶部的面板就越多。 |
<Focus> |
指定面板在转换期间是否可以获得焦点;包含
一个 onTransition 属性(布尔值)。
|
<Bounds> |
定义面板在屏幕上的矩形区域(位置和大小)。在 屏幕上。此区域由左、上、下、 宽和高等属性控制。
使用百分比时,您可以使用偏移属性对基于百分比的边界应用固定
调整 -
例如,如需指定面板占据屏幕高度的 100%,同时排除底部的固定高度导航栏,请将高度设置为 100%,并将 |
<SafeBounds> |
指定面板边界内的安全区域,该区域不会被显示屏切口或内嵌区域重叠
,以强调在其中绘制的应用的兼容性
。其属性与 <Bounds> 类似。
|
<Corner> |
定义面板边角的半径,允许使用圆角 并包含半径属性(整数)。默认使用尖角,无需定义。 |
<Insets> |
指定面板的内嵌区域(内边距)。它包含左、上、 右、下属性。这些内嵌区域会报告给在面板内启动的应用 。
|
<Background> |
引入可选的背景装饰面板,以防止在切换应用时出现透视 效果。它为此装饰层定义颜色和 Alpha 等属性。如果尚未设置装饰层的属性(例如边界和 层),则默认使用变体的属性。 |
示例代码
<Variant id="@id/opened">
<Visibility isVisible="true"/>
<Bounds left="0dp"
top="0dp"
right="100%"
bottom="100%"
bottomOffset="100dp"/>
<Alpha value="1.0"/>
<Layer value="10"/>
<Focus onTransition="true"/>
<Corner radius="24dp"/>
<Insets left="16dp" top="0dp" right="16dp" bottom="48dp"/>
<Background color="@color/app_background" alpha="0.9"/>
</Variant>
插值视觉属性
使用 KeyFrameVariant 插值视觉属性。variant 的这种专用扩展基于连续的分数值(0 到
1),允许通过连续输入(例如拖动操作)实现平滑的动态转换,当面板的状态随着拖动量动态变化时,就会发生这种情况。
XML 属性
KeyFrameVariant 没有属性。<KeyFrameVariant> 标记包含
定义 KeyFrameVariant 所需的信息。
XML 子元素
KeyFrameVariant 包含一个或多个 <KeyFrame> 子标记。每个
<KeyFrame> 都有一个 framePosition 属性(0-100),并引用变体
属性(另一个变体的 ID)。这些 keyframes 定义了面板的
在连续转换中特定点的状态。
示例代码
<KeyFrameVariant id="@id/panel_resizing">
<KeyFrame framePosition="0" variant="@id/minimized"/>
<KeyFrame framePosition="75" variant="@id/opened"/>
<KeyFrame framePosition="100" variant="@id/expanded"/>
</KeyFrameVariant>