使用变体设计视觉状态

变体用于为面板定义特定的视觉状态,从而使单个 面板可以具有多个不同的视觉表示形式,例如“已打开”或“已关闭”状态。使用 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>

定义面板在屏幕上的矩形区域(位置和大小)。在 屏幕上。此区域由左、上、下、 宽和高等属性控制。

  • leftright 指定与屏幕左边缘的距离。
  • topbottom 指定与屏幕上边缘的距离。
  • widthheight 指定矩形的宽度和高度,仅当未指定 leftright(或 topbottom)时才需要。
  • dimensions 可以采用像素、DP、百分比或资源引用来指定。

使用百分比时,您可以使用偏移属性对基于百分比的边界应用固定 调整 - leftOffsettopOffsetrightOffset、 和bottomOffset

例如,如需指定面板占据屏幕高度的 100%,同时排除底部的固定高度导航栏,请将高度设置为 100%,并将 bottomOffset 设置为导航栏的固定高度。这样做会将面板的底部边缘向上拉。

<SafeBounds> 指定面板边界内的安全区域,该区域不会被显示屏切口或内嵌区域重叠 ,以强调在其中绘制的应用的兼容性 。其属性与 <Bounds> 类似。
<Corner> 定义面板边角的半径,允许使用圆角 并包含半径属性(整数)。默认使用尖角,无需定义。
<Insets>

指定面板的内嵌区域(内边距)。它包含左、上、 右、下属性。这些内嵌区域会报告给在面板内启动的应用 。

  • left 指定左侧的内嵌区域。
  • right 指定右侧的内嵌区域。例如, 右侧边衬区为零表示右侧没有边衬区。
  • top 指定顶部的内嵌区域。
  • bottom 指定底部的内嵌区域。例如,右侧边衬区为零表示右侧没有边衬区。
<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>