在进行自动化脚本开发时,单选框(Radio) 是实现互斥选项选择 的核心基础控件,广泛应用于任务模式切换、参数配置、性别选择、权限设置、运行策略指定等场景。它与复选框(Checkbox)的核心区别在于:同一组内单选框只能选中一项,保证选择结果唯一性。本文从基础概念、核心属性、事件机制、函数 API、完整 Demo 源码、实战场景、常见问题等维度,全面讲解单选框控件的使用方法。
一、单选框(Radio)控件基础认知
1. 核心定义与定位
冰狐智能辅助中的单选框控件(Radio) ,父类为文本控件(Text) ,继承文本控件的基础样式与属性能力,专门用于在一组互斥选项中选择且仅选择一项。
它是自动化脚本 UI 中配置类交互的首选控件,比如:
- 自动化任务执行模式:快速模式 / 标准模式 / 深度模式
- 设备操作权限:允许 / 禁止
- 数据同步策略:仅 WiFi / 移动网络 / 手动同步
- 性别、身份类型、操作范围等固定互斥选项
2. 关键使用规则
单选框不能单独生效 ,这是与复选框最大的不同 ------必须嵌套在 radioGroup 控件中,才能实现 "组内互斥选中" 的核心功能。脱离 radioGroup 的单选框,会失去互斥特性,无法达到预期交互效果。
3. 与复选框(Checkbox)核心差异
| 对比维度 | 单选框(Radio) | 复选框(Checkbox) |
|---|---|---|
| 选择规则 | 同组内仅能选 1 项 | 同组内可多选 / 全选 |
| 容器依赖 | 必须放在 radioGroup 中 | 无需专属容器,直接使用 |
| 适用场景 | 互斥选项、唯一配置 | 批量选择、多条件勾选 |
| 状态逻辑 | 选中一项自动取消其他项 | 选中 / 取消互不干扰 |
二、单选框核心属性详解
冰狐智能辅助单选框的属性分为基础文本属性 (继承自 Text 控件)和专属选中属性 ,其中checked是最核心的配置项。
1. 基础属性(继承 Text 控件)
- id :控件唯一标识,用于 JS 中通过
ui(id)获取控件实例,必填且唯一 - text:单选框显示的文本内容,如 "苹果""快速模式"
- size:文本字体大小,调整显示清晰度
- gravity:文本对齐方式,如 center(居中)、left(左对齐)
- layoutWeight:布局权重,适配不同屏幕尺寸
2. 核心专属属性:checked
checked 用于定义单选框的初始选中状态,仅支持布尔值:
checked="true":初始默认选中checked="false"/ 不设置:初始未选中
支持两种设置方式:
- template 静态设置:直接在 XML 标签中写死初始状态,适合固定默认配置
- JS 动态设置:通过脚本函数实时修改状态,适合根据逻辑动态调整
3. 静态属性编写示例
XML
<template>
<linear orientation="vertical">
<!-- 单选框组:必须包裹radio,实现互斥选择 -->
<radioGroup>
<radio id="mode_fast" text="快速模式" checked="true" />
<radio id="mode_standard" text="标准模式" />
<radio id="mode_deep" text="深度模式" />
</radioGroup>
</linear>
</template>
上述代码中,radioGroup包裹 3 个单选框,checked="true"让 "快速模式" 默认选中,且三者互斥。
三、单选框核心事件:onChecked 选中事件
交互是 UI 控件的核心,单选框的onChecked 事件是监听选择状态变化的唯一入口,用于捕获用户选中 / 取消选中的操作,并执行后续逻辑(如更新配置、提示用户、联动其他控件)。
1. 事件作用
- 监听单选框选中状态切换
- 获取当前操作的单选框文本、选中状态
- 触发业务逻辑:保存配置、更新界面、执行任务分支
2. 事件绑定方式
直接在<radio>标签中通过onChecked="函数名"绑定,函数会在状态变化时自动调用,回调参数包含当前单选框实例 和选中状态(boolean)。
3. 事件回调函数规范
javascript
function 自定义事件名(radio, checked) {
// radio:当前操作的单选框控件
// checked:选中状态,true=选中,false=取消选中
console.log("选中文本:" + radio.text + ",选中状态:" + checked);
// 后续业务逻辑
}
4. 事件绑定完整示例
XML
<template>
<linear>
<radioGroup>
<radio text="允许权限" onChecked="onRadioChange" checked="true" />
<radio text="禁止权限" onChecked="onRadioChange" />
</radioGroup>
</linear>
</template>
<script>
function main() {
// 必须调用,初始化UI界面
setupUI();
}
// 单选框选中事件回调
function onRadioChange(radio, checked) {
if (checked) {
console.log("用户选择:" + radio.text);
toast("已选择:" + radio.text); // 悬浮提示
}
}
</script>
四、单选框核心 API 函数:checked/value
单选框提供checked() 和value() 两个等效函数,用于动态获取 / 设置选中状态,返回值均为布尔值,使用逻辑完全一致,开发者可按需选择。
1. 函数参数与用法
| 函数名 | 参数 | 用法说明 | 返回值 |
|---|---|---|---|
| checked() | 无参数 | 获取当前选中状态 | boolean |
| checked(isChecked) | isChecked(boolean) | 设置选中状态(true = 选中,false = 取消) | 无 |
| value() | 无参数 | 同 checked (),获取状态 | boolean |
| value(isChecked) | isChecked(boolean) | 同 checked (),设置状态 | 无 |
2. 动态操作示例
javascript
// 页面激活时执行(类似Android的onResume)
function onUIResume() {
// 1. 动态设置选中状态
ui("mode_deep").checked(true);
// 等效写法:ui("mode_deep").value(true);
// 2. 动态获取选中状态
var isDeepMode = ui("mode_deep").checked();
console.log("深度模式是否选中:" + isDeepMode);
// 等效写法:ui("mode_deep").value();
}
3. 核心注意事项
- 必须先通过
ui(id)获取控件实例,再调用函数 - 设置状态时,同组内其他单选框会自动取消选中,无需手动处理
- 获取状态仅返回当前控件状态,若需获取组内选中项,需遍历判断
五、单选框完整 Demo 源码(可直接运行)
以下是可直接在冰狐智能辅助平台运行 的完整 Demo,包含静态配置、事件监听、动态操作、组内选中项获取、配置保存五大核心功能,覆盖 90% 以上实战场景,代码注释详尽,便于二次开发。
1. 完整源码
javascript
<template>
<linear orientation="vertical" padding="10">
<!-- 标题文本 -->
<text text="自动化任务配置" size="28" gravity="center" marginBottom="15" />
<!-- 一、执行模式单选框组 -->
<text text="1. 选择执行模式:" size="22" marginBottom="5" />
<radioGroup id="modeGroup" marginBottom="15">
<radio id="fast" text="快速模式" checked="true" onChecked="onModeChange" />
<radio id="standard" text="标准模式" onChecked="onModeChange" />
<radio id="deep" text="深度模式" onChecked="onModeChange" />
</radioGroup>
<!-- 二、数据同步策略单选框组 -->
<text text="2. 数据同步策略:" size="22" marginBottom="5" />
<radioGroup id="syncGroup" marginBottom="15">
<radio id="wifi" text="仅WiFi同步" checked="true" onChecked="onSyncChange" />
<radio id="mobile" text="移动网络同步" onChecked="onSyncChange" />
<radio id="manual" text="手动同步" onChecked="onSyncChange" />
</radioGroup>
<!-- 操作按钮 -->
<button
id="btn_get"
text="获取当前配置"
onClick="getCurrentConfig"
marginBottom="10"
/>
<button
id="btn_reset"
text="重置为默认配置"
onClick="resetConfig"
/>
</linear>
</template>
<script>
// 程序入口:必须优先调用setupUI()
function main() {
setupUI();
console.log("单选框Demo初始化完成");
}
// 页面激活时调用(初始化动态配置)
function onUIResume() {
// 可在此加载本地保存的配置,动态设置单选框状态
}
// ============== 单选框事件回调 ==============
// 执行模式选择事件
function onModeChange(radio, checked) {
if (checked) {
console.log("执行模式切换为:" + radio.text);
toast("执行模式:" + radio.text);
}
}
// 同步策略选择事件
function onSyncChange(radio, checked) {
if (checked) {
console.log("同步策略切换为:" + radio.text);
toast("同步策略:" + radio.text);
}
}
// ============== 按钮点击逻辑 ==============
// 获取当前所有选中配置
function getCurrentConfig() {
// 获取执行模式选中项
var fastChecked = ui("fast").checked();
var standardChecked = ui("standard").checked();
var deepChecked = ui("deep").checked();
var mode = fastChecked ? "快速模式"
: standardChecked ? "标准模式"
: "深度模式";
// 获取同步策略选中项
var wifiChecked = ui("wifi").checked();
var mobileChecked = ui("mobile").checked();
var manualChecked = ui("manual").checked();
var sync = wifiChecked ? "仅WiFi同步"
: mobileChecked ? "移动网络同步"
: "手动同步";
// 输出结果
var result = "当前配置:\n执行模式:" + mode + "\n同步策略:" + sync;
console.log(result);
toast(result);
}
// 重置为默认配置
function resetConfig() {
// 重置执行模式:快速模式
ui("fast").checked(true);
// 重置同步策略:仅WiFi同步
ui("wifi").checked(true);
toast("已重置为默认配置");
console.log("配置已重置");
}
</script>
2. Demo 功能说明
- 双组单选框:分别管理执行模式、同步策略,互不干扰
- 默认选中:页面加载时自动选中默认选项
- 实时监听:选择变化时控制台打印 + 悬浮提示
- 配置获取:一键获取两组单选框的选中结果
- 重置功能:快速恢复初始配置
- 规范布局:使用 linear 垂直布局,适配手机屏幕
六、单选框实战开发技巧与最佳实践
1. 组内选中项高效获取
实战中常需获取整个 radioGroup 的选中结果,推荐封装通用函数,避免重复代码:
javascript
// 通用:获取单选框组选中项的文本
function getRadioCheckedText(radioIds) {
for (var i = 0; i < radioIds.length; i++) {
if (ui(radioIds[i]).checked()) {
return ui(radioIds[i]).text;
}
}
return "";
}
// 使用示例
var modeIds = ["fast", "standard", "deep"];
var currentMode = getRadioCheckedText(modeIds);
2. 动态生成单选框
若选项不固定(如从接口获取),可通过 JS 动态创建:
javascript
// 动态添加单选框到radioGroup
function addRadioToGroup(groupId, id, text, isChecked) {
var radio = {
id: id,
text: text,
checked: isChecked,
onChecked: "onRadioChange"
};
// 冰狐平台动态添加控件API
addView(groupId, "radio", radio);
}
3. 与自动化业务逻辑联动
单选框选择结果直接决定自动化脚本执行逻辑:
javascript
// 根据执行模式调整任务逻辑
function runTask() {
if (ui("fast").checked()) {
// 快速模式:简化步骤,快速执行
fastRun();
} else if (ui("standard").checked()) {
// 标准模式:默认流程
standardRun();
} else {
// 深度模式:全量步骤,精准执行
deepRun();
}
}
4. 样式优化建议
- 统一文本大小:建议 20-24px,兼顾清晰度与布局美观
- 合理设置间距:通过
margin属性避免选项拥挤 - 分组清晰:不同业务逻辑的单选框,分属不同 radioGroup
- 默认选中:必设默认项,避免无选中状态导致逻辑异常
七、常见问题与解决方案
1. 问题 1:单选框无法互斥,可多选
原因 :未放在radioGroup中,或多个组嵌套错误解决方案:严格将同组 radio 包裹在一个 radioGroup 内,不同组用不同 radioGroup
2. 问题 2:JS 获取不到控件状态
原因:
- id 拼写错误
- 未调用
setupUI()就操作控件 - 函数执行时机过早(UI 未初始化完成)解决方案:
- 核对 id 一致性
- main 函数第一行必须
setupUI() - 放在
onUIResume或事件回调中操作
3. 问题 3:选中事件不触发
原因:
- onChecked 绑定的函数名拼写错误
- 函数未定义
- 控件未正确初始化解决方案:
- 检查标签与函数名一致
- 确保函数在 script 中定义
- 重启脚本重新初始化 UI
4. 问题 4:动态设置状态不生效
原因:
- 参数不是布尔值(如写
checked("true")) - 控件 id 错误解决方案:
- 严格使用
true/false布尔值 - 确认 id 正确无误
八、总结
单选框(Radio)是冰狐智能辅助自动化脚本 UI 开发中配置类交互的基石,核心要点可总结为:
- 必须依赖 radioGroup:实现互斥选择,这是使用前提
- 核心属性 checked:控制初始选中状态,支持静态 / 动态设置
- 核心事件 onChecked:监听选择变化,处理业务逻辑
- 核心 APIchecked/value:动态读写状态,适配复杂逻辑
- 规范使用:分组清晰、默认选中、样式统一,提升用户体验
掌握本文内容,即可快速开发出规范、稳定、易用的单选框界面,满足自动化脚本中互斥选项配置的所有需求。结合冰狐智能辅助的其他控件(按钮、输入框、复选框、下拉框),可快速构建完整的自动化脚本 UI,大幅提升脚本的易用性与专业性。