floaty.window xml模式 RadioGroup 如何获取当前所选的值

已存档
兔如花
9
· 1 个月前
第 1 条补充
·
1 个月前

xml 格式 设置seekbar 初始值

第 2 条补充
·
1 个月前

xml 格式 设置button 按钮上文字

回答

Hamibot AI
1
· 1 个月前

要获取 floaty.windowRadioGroup 的当前选中值,需通过以下步骤实现:

  1. 获取 RadioGroup 引用
    通过悬浮窗对象直接访问 XML 中定义的 RadioGroup(假设 id="rg"):

    var radioGroup = window.rg;
    
  2. 获取选中项的 ID
    调用 getCheckedRadioButtonId() 获取当前选中的 RadioButton 的资源 ID:

    var selectedId = radioGroup.getCheckedRadioButtonId();
    
  3. 获取选中项的文本
    使用 findViewById() 通过 ID 获取 RadioButton 实例并读取文本:

    var selectedRadioButton = radioGroup.findViewById(selectedId);
    var selectedText = selectedRadioButton.getText();
    
  4. 完整示例代码
    需在 ui.run() 中确保 UI 线程操作:

    // 文档地址 https://docs.hamibot.com/
    var window = floaty.window(
      <vertical id="rg">
        <radiogroup id="rg" orientation="vertical">
          <radio text="选项A" />
          <radio text="选项B" />
          <radio text="选项C" />
        </radiogroup>
        <button id="btn">获取选中值</button>
      </vertical>
    );
    
    window.btn.click(function () {
      ui.run(function () {
        var selectedId = window.rg.getCheckedRadioButtonId();
        if (selectedId != -1) { // -1 表示无选中
          var selectedRadioButton = window.rg.findViewById(selectedId);
          toast("选中: " + selectedRadioButton.getText());
        } else {
          toast("未选中");
        }
      });
    });
    

关键点说明:

  • getCheckedRadioButtonId() 返回选中项的资源 ID,若无选中项则返回 -1
  • 所有对控件的操作必须在 ui.run() 中执行,避免线程安全问题。
  • findViewById() 需作用于 RadioGroup 而非 window,确保查找范围正确。

补充回答 1

在 Hamibot 的 XML 布局中,SeekBar 控件不支持直接通过 progress 属性设置初始值。你需要通过 JavaScript 代码在创建 UI 后手动设置初始进度。


✅ 正确做法

  1. 在 XML 中定义 SeekBar 并指定 id

    <vertical>
      <seekbar id="sb" />
    </vertical>
    
  2. 在 JS 中获取 SeekBar 引用并设置初始值
    使用 setMax() 设置最大值(可选),再用 setProgress() 设置初始值:

    // 文档地址 https://docs.hamibot.com/
    var window = floaty.window(
      <vertical>
        <seekbar id="sb" />
      </vertical>
    );
    
    // 设置最大值(可选)
    window.sb.setMax(100);
    
    // 设置初始值
    window.sb.setProgress(50);
    

⚠️ 注意事项

  • SeekBarprogress 属性在 XML 中不生效,必须通过代码设置。
  • 所有对控件的操作(如 setMax()setProgress())都需在 floaty.window() 创建之后执行。
  • 若需监听 SeekBar 的变化,可使用 .on("progress", function(progress) { ... }) 方法。

📌 示例:完整 UI 与交互

// 文档地址 https://docs.hamibot.com/
var window = floaty.window(
  <vertical padding="10">
    <text id="valueText" text="当前值:0" textSize="16sp" />
    <seekbar id="sb" layout_weight="1" />
  </vertical>
);

window.sb.setMax(100);
window.sb.setProgress(50);
window.valueText.setText("当前值:" + window.sb.getProgress());

window.sb.on("progress", function(progress) {
  window.valueText.setText("当前值:" + progress);
});

✅ 小结

在 Hamibot 中,SeekBar 的初始值需通过 setProgress() 方法在 JavaScript 中设置,XML 不支持直接配置初始进度。通过获取控件引用并调用方法,即可灵活控制进度条的初始状态。


补充回答 2

在 Hamibot 的 XML 布局中,设置 Button 按钮上的文字非常简单,只需使用 text 属性即可。


✅ 设置按钮文字的 XML 写法

在定义 <button> 标签时,直接添加 text 属性,属性值就是按钮上显示的文字内容:

<button text="点击这里" />

你也可以定义多个按钮,每个按钮设置不同的文字:

<vertical>
  <button text="按钮一" />
  <button text="按钮二" />
</vertical>

💡 示例:带文字的按钮布局

以下是一个完整的示例,展示如何在垂直布局中定义多个带文字的按钮:

// 文档地址 https://docs.hamibot.com/
var window = floaty.window(
  <vertical padding="10">
    <button text="开始" />
    <button text="停止" />
    <button text="设置" />
  </vertical>
);

这段代码会创建一个悬浮窗,包含三个按钮,分别显示“开始”、“停止”和“设置”。


📌 注意事项

  • text 属性支持中文和英文字符,无需额外编码处理。
  • 如果你需要在运行时动态修改按钮文字,可以通过 id 获取按钮对象并调用 setText() 方法(见文档[4])。
  • 不建议在 text 中使用过长的内容,以免影响界面美观。

✅ 小结

在 XML 中设置 Button 按钮上的文字,只需使用 text 属性即可,语法简单明了。这是最直接、最常见的做法,适用于绝大多数按钮文字的初始设定场景。

ℹ️ 本回答由 AI 生成,内容仅供参考