本文档目前提供葡萄牙语版本。其他语言的翻译正在准备中。
实用手册
按任务组织的简短直接的示例——在 CrossFly 中 "如何做 X",用最少的代码并附深入链接。
快速界面范式——对话框、下拉、提示与选择,每个范例都附可直接复制的代码。
在屏幕底部显示 iOS 风格的操作面板,包含若干按钮和一个「取消」。
使用 RelativeLayout 将一个徽标/计数器叠加到另一个组件的角落。
构建一个标签栏,为每个标签提供内容并响应标签切换。
构建一个带圆角背景、内部布局内容并响应点击的 Component。
以三种模式使用 Progress —— 旋转图标、确定进度条和不确定进度条。
显示自动出现、自动消失的非模态短暂反馈,不打断用户当前正在做的事。
打开一个带「取消/确定」按钮的模态确认对话框并响应用户选择。
单独的一个 Option 就是复选框;同一个 Group 中的多个 Option 就是单选框(互斥选择)。
打开下拉列表、响应用户的选择,并取回选中的那一项,适合表单里的枚举字段。
金额掩码、字段校验、密码框与响应式表单,四个平台上表现一致。
在系统原生数字键盘、内置 Keypad 或计算器之间选择。
使用掩码自动格式化 CPF、CEP 和日期,并读取纯净的数字。
点击时打开 DatePicker 或 TimePicker 并按 locale 格式化的字段。
自动套用货币格式的字段:小数位数、千分位分隔,并可直接读回数值本身。
带掩码的密码字段,附可见性切换按钮,让用户随时确认自己输入的内容。
用 GridLayout 把标签和输入框按比例分列对齐,屏幕变化时版式自动跟着调整。
限制可输入的字符与长度,并在提交前读到已清洗、可直接使用的值。
长列表不卡顿:分页、按需加载更多,以及滚动和越界回弹的控制。
将列表作为居中的模态窗口打开,通过 ItemFactory 使用自定义行。
使用 VirtualListView + DataAdapter 通过回收视图(类似 RecyclerView)渲染超大列表。
使用 ListView(SINGLE 或 MULTIPLE)显示文本列表并捕获选择。
当用户滚动到虚拟列表末尾附近时自动追加下一批数据,无需手动翻页。
在 VirtualListView 之上使用 PagedDataAdapter(LRU 缓存)按需加载页面。
使用 setScrollable 在任何 Component 上启用滚动,并配置边缘弹性效果。
打开与关闭页面、在页面间传递数据并取回结果,也包括确认对话框。
相机、GPS、生物识别、蓝牙、振动与剪贴板——同一份 Java 代码调用设备硬件。
检查可用性,并使用指纹、Face ID 或 Windows Hello 对用户进行认证。
打开一个带可拖动图钉和 GPS 的地图,让用户通过 LocationPicker 确认一个坐标(LatLon)。
扫描并发现附近的蓝牙设备、建立连接,然后读取 GATT 特征或订阅其通知。
录制视频(带或不带音频),设置质量和时长限制,并获取 MP4 的路径。
使用 BarcodePicker 通过摄像头扫描二维码/条形码,或用 CameraBarcode 解码一张 Image。
用 Location + retrieveGPSData() 读取设备 GPS 坐标,或用 GPSThread 持续跟踪。
调用设备摄像头拍摄照片,并拿到已保存 JPEG 文件的路径,四个平台写法一致。
朗读一段文本并将用户的语音转录为文本,可配置区域设置/速度。
快速的设备反馈——振动、蜂鸣声以及剪贴板的复制/粘贴。
从相册或相机加载图片、生成缩略图并保存,同时避免耗尽设备内存。
使用 Main.getScreenShot 把当前后台缓冲区捕获为 Image 并保存。
从本地文件或从网络下载的字节加载 PNG/JPEG/GIF,并用 ImageView 显示它。
使用 addBackgroundImage 和 ImageSize 为任意 Component 添加背景图像。
使用 resize() 把图像调整为缩略图,可选择模式和质量。
把 Image 写入磁盘(带时间戳的文件)或写入 OutputStream,以 PNG 或 JPEG 格式。
淡入淡出、循环脉冲、移动组件与页面转场,全部用 CrossFly 的 value animator。
在 show()/hide() 之前于 WindowStyle 中配置过渡效果(slide、fade、scale)——CrossFly 会自动为屏幕切换添加动画。
使用 LoopAnimation 以无限循环为某个值添加动画,适用于加载指示器和发光效果。
使用 AlphaAnimation 为组件的不透明度添加动画,通过 alpha() 应用该值并按需重绘。
使用 PositionAnimation(以像素为单位的线性插值)将组件从一个点滑动到另一个点。
SQLite 实战:打开数据库、带参数的增删改查、事务,以及把重活移出 paint thread。
使用 try-with-resources 打开/创建 .db 文件、使用内存数据库并创建表。
在工作线程中运行 SQLite 查询,并使用 Component.onUI 返回 UI。
快速插入数千行——事务、用 reset() 重用 statement,或原生 bulkInsert。
使用位置参数和 cursor 进行插入、读取、更新和删除,无需拼接 SQL。
使用密钥打开、选择加密算法、更换/移除密钥并检测错误的密钥。