单选框 - radio

# 选择框控件: radio ![image.png](https://cos.easydoc.net/84678576/files/luhqco3r.png) ## text radio控件的文本,显示在单选框后面。实际上radio控件也继承于text和button控件,它们的属性也可以用在radio上,比如textSize, textStyle。 ## checked 设置radio单选框的选中状态,当checked="true"为选中选项框,否则为未选中选项框。 ## enabled 设置单选框是否是启用的,若enabled="false"则为禁用状态,显示未灰色,无法交互。 ## isChecked() 返回 {boolean} 返回选项框是否被选中,是则返回true,否则返回false。例如`$ui.radio1.isChecked()。` ## 事件: check checked {boolean} 是否被勾选 view {View} 当前事件的View 当用户勾选/取消勾选选项框时会触发该事件。 ``` "ui"; ui.layout( <vertical padding="16"> <radio id="radio1" text="单选框1"/> <radio id="radio2" text="单选框2"/> <radio id="radio3" text="已勾选的单选框3" checked="true"/> </vertical> ); // 监听单个radio的选中 $ui.radio2.on("check", (checked) => { if (checked) { toastLog("单选框2被勾选了"); } else { toastLog("单选框2被取消勾选了"); } }); ``` # 选择框布局: radiogroup --- radiogroup单选框组合提供了几个单选框radio选项,但用户至多只能选择其中一个选项,即实现选项选中互斥功能。 ``` <radiogroup mariginTop="16" gravity="left"> <radio id="open" text="开" checked={stor.get("open")} /> <radio id="end" text="关" checked={stor.get("end")} /> </radiogroup> ``` ## checkedButton 设置radiogroup单选框组合中初始勾选的单选框id。例如checkedButton="@+id/radio5",则使id为radio5的单选框选项为初始勾选状态。 ``` "ui"; $ui.layout( <vertical padding="16"> <radiogroup checkedButton="@+id/radio5"> <radio id="radio4" text="单选框4"/> <radio id="radio5" text="初始勾选的单选框5"/> <radio id="radio6" text="单选框6"/> </radiogroup> </vertical> ); ``` ## setOnCheckedChangeListener(listener) listener {Function} 勾选监听的回调函数,其参数为 group {RadioGroup} 发生勾选变化事件的radiogroup对象 checkedId {number} 被勾选的radio的id,是一个整数;若当前没有任何单选框被勾选,则为-1 设置某个radiogroup单选框组合中的单选框被选中时的监听。需要注意的是这里的checkedId是一个整数,并不是类似于radio5这样的id字符串,我们可以通过findViewById()函数来获取具体被勾选的单选框,比如: ``` "ui"; $ui.layout( <vertical padding="16"> <radiogroup id="radiogroup1"> <radio id="radio1" text="单选框1"/> <radio id="radio2" text="单选框2"/> <radio id="radio3" text="单选框3"/> </radiogroup> </vertical> ); $ui.radiogroup1.setOnCheckedChangeListener((group, checkedId) => { // 根据整数id获取勾选的radio控件 let checkedRadio = $ui.radiogroup1.findViewById(checkedId); switch (checkedRadio) { case $ui.radio1: toastLog("单选框1被勾选"); break; case $ui.radio2: toastLog("单选框2被勾选"); break; case $ui.radio3: toastLog("单选框3被勾选"); break; default: toastLog("没有任何单选框被勾选"); break; } }); ``` ## getCheckedRadioButtonId() 返回 {number} 获取单选框组合中的已勾选的单选框选项的整数ID,若当前没有任何单选框被勾选,则为-1。 需要注意的是这里的==checkedId==是一个整数,并不是类似于==radio5==这样的id字符串,我们可以通过==findViewById()== 函数来获取具体被勾选的单选框。 进一步,我们可以通过==indexOfChild==获取被勾选的单选框在radiogroup中的位置。 例如: ``` "ui"; $ui.layout( <vertical padding="16"> <radiogroup id="radiogroup2"> <radio id="radio4" text="单选框4"/> <radio id="radio5" text="单选框5"/> <radio id="radio6" text="单选框6"/> </radiogroup> <button id="get" text="获取当前勾选项"/> </vertical> ); $ui.get.on('click', () => { // 获取radiogroup2勾选的单选框ID let checkedId = $ui.radiogroup2.getCheckedRadioButtonId(); if (checkedId === -1) { toastLog("没有任何单选框被勾选"); } else { // 根据id获取勾选的radio let checkedRadio = $ui.radiogroup2.findViewById(checkedId); // 获取勾选的位置 let i = $ui.radiogroup2.indexOfChild(checkedRadio); toastLog("当前勾选的单选框的文本: " + checkedRadio.getText().toString() + ", 位置: " + i); } }); ``` ## clearCheck() 清空单选框组合的各单选框选项的勾选状态。也即让单选框组合重置为未勾选状态。 ``` "ui"; $ui.layout( <vertical padding="16"> <checkbox id="cb1" text="复选框"/> <radiogroup id="radiogroup1"> <radio id="radio1" text="单选框1"/> <radio id="radio2" text="单选框2"/> <radio id="radio3" text="单选框3"/> </radiogroup> <button id="clear" text="清空选择"/> </vertical> ); $ui.clear.on('click', () => { // 清空单选框选择 $ui.radiogroup1.clearCheck(); // 设置复选框为不勾选 $ui.cb1.attr("checked", "false"); }); ``` --- 例子 --- ``` "ui"; ui.layout( <vertical padding="16"> <checkbox id="cb1" text="复选框"/> <checkbox id="cb2" checked="true" text="勾选的复选框"/> <radiogroup> <radio text="单选框1"/> <radio text="单选框2"/> <radio text="单选框3"/> </radiogroup> <radiogroup mariginTop="16"> <radio text="单选框1"/> <radio text="单选框2"/> <radio text="勾选的单选框3" checked="true"/> </radiogroup> </vertical> ); ui.cb1.on("check", (checked)=>{ if(checked){ toast("第一个框被勾选了"); }else{ toast("第一个框被取消勾选了"); } }); ```