Widget
组件
桌面小组件中由 Glance 渲染的原生视图与布局。
从 supernode/widget 导入组件。它们只接受 Glance 能渲染的 props 和取值,不支持的用法在类型检查阶段就会报错。所有组件都通过 modifier 指定布局与装饰。颜色与对齐取值详见 View。
import { Column, Modifier, Text } from "supernode/widget";小组件不提供 TextField、Hooks 与 Context;需要输入和状态时请使用 App 页面。
Text
显示文本。
<Text fontSize={16} fontWeight="bold" fontStyle="italic" color="#057AF6">
Hello SuperNode
</Text>| Prop | Type | Description |
|---|---|---|
children | string 或表达式 | 文本内容。 |
fontSize | number | 字号(sp),默认 14。 |
fontWeight | "normal" | "medium" | "bold" | 字重,默认 "normal"。 |
fontStyle | "normal" | "italic" | 字体样式,默认 "normal"。 |
color | string | { light, dark } | 文字颜色:十六进制颜色,或分别指定浅色/深色模式的颜色,详见颜色取值。 |
Glance 只能渲染 Compose FontWeight 中的 normal(400)、medium(500)和 bold(700)三档。
DateText
DateText 使用原生日期格式显示 JavaScript Date。
<DateText date={new Date()} format="time" prefix="更新于 " color="#777777" />| Prop | Type | Description |
|---|---|---|
date | Date | 需要显示的时间点。无效的 Date 会抛出异常。 |
format | "date" | "time" | 显示固定日期或固定时间。 |
prefix | string | 日期前的静态文本。 |
suffix | string | 日期后的静态文本。 |
fontSize | number | 字号(sp),默认 14。 |
fontWeight | "normal" | "medium" | "bold" | 字重,默认 "normal"。 |
fontStyle | "normal" | "italic" | 字体样式,默认 "normal"。 |
color | string | { light, dark } | 文字颜色:十六进制颜色,或分别指定浅色/深色模式的颜色。 |
prefix、日期和 suffix 会组成同一个文本视图,共享字体、颜色和换行行为。日期在小组件渲染时按设备的语言和时区格式化,直到下一次刷新前保持不变,因此不提供相对时间、计时器这类实时格式。需要更新时设置 options.refresh。
Image
<Image src="home_smile_solid" contentScale="crop" modifier={Modifier.size(48)} />| Prop | Type | Description |
|---|---|---|
src | string | HTTP(S) URL、图片 Data URL、相对或绝对路径、file: URL,或 PikaIcons 资源名。相对路径基于脚本工作目录解析。 |
contentScale | "fit" | "crop" | "fillBounds" | 图片在边界内的缩放方式,默认 "fit"。 |
contentScale | 行为 |
|---|---|
"fit" | 等比缩放,使整张图片完整显示在边界内。 |
"crop" | 等比缩放并填满边界,超出部分被裁剪。 |
"fillBounds" | 拉伸填满边界,不保持宽高比。 |
响应、图片数据或资源名无效时会抛出明确错误。
Spacer
占用由 modifier 指定大小的空白。与 Compose 的 Spacer 一样,不设尺寸时为 0 × 0,自身也不会伸展;要撑满 Row 或 Column 的剩余空间,给它加上 defaultWeight()。
<Row>
<Text>左</Text>
<Spacer modifier={Modifier.width(16)} />
<Text>右</Text>
</Row>HorizontalDivider 与 VerticalDivider
显示一条细分隔线。HorizontalDivider 填满可用宽度,VerticalDivider 填满可用高度。两者同样支持 modifier。
<Column>
<Text>上方</Text>
<HorizontalDivider color="#FF0000" thickness={2} />
<Row modifier={Modifier.height(24)}>
<Text>左</Text>
<VerticalDivider />
<Text>右</Text>
</Row>
</Column>| Prop | Type | Description |
|---|---|---|
color | string | { light, dark } | 线条颜色:十六进制颜色,或分别指定浅色/深色模式的颜色,默认使用主题的分隔线颜色。详见颜色取值。 |
thickness | number | 线条粗细(dp),默认 1。 |
布局
Glance 的每个 Column、Row、Box 在展开数组和 fragment 后最多渲染 10 个子节点。
Column
纵向排列子视图,同样支持 modifier。
<Column horizontalAlignment="center" spacing={4} modifier={Modifier.padding(12)}>
<Text>标题</Text>
<Text>副标题</Text>
</Column>| Prop | Type | Description |
|---|---|---|
horizontalAlignment | "start" | "center" | "end" | 子视图的水平对齐方式,默认 "start"。 |
spacing | number | 子视图之间的间距(dp),相当于 Arrangement.spacedBy,默认 0。 |
Row
横向排列子视图,同样支持 modifier。
<Row verticalAlignment="center" spacing={8} modifier={Modifier.padding(12)}>
<Text>左</Text>
<Text>右</Text>
</Row>| Prop | Type | Description |
|---|---|---|
verticalAlignment | "top" | "center" | "bottom" | 子视图的垂直对齐方式,默认 "top"。 |
spacing | number | 子视图之间的间距(dp),相当于 Arrangement.spacedBy,默认 0。 |
Box
叠放子视图,同样支持 modifier。
<Box contentAlignment="bottomEnd" modifier={Modifier.padding(12)}>
<Text>标题</Text>
</Box>| Prop | Type | Description |
|---|---|---|
contentAlignment | ContentAlignment | 子视图的叠放位置,默认 "topStart"。详见对齐取值。 |
示例:个人资料布局
<Row verticalAlignment="center" spacing={12} modifier={Modifier.padding(16)}>
<Image
src={profile.avatar}
contentScale="crop"
modifier={Modifier.size(64).cornerRadius(32)}
/>
<Column spacing={4}>
<Text fontSize={16} fontWeight="bold">{profile.nickname}</Text>
<Text color="#777777">@{profile.id}</Text>
<Row spacing={12}>
<Text>{profile.followers} 粉丝</Text>
<Text>{profile.following} 关注</Text>
</Row>
</Column>
</Row>