xml模式,动态更换button 上的文字 完整demo

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

floaty.window 要xml 模式动态修改按钮文字 不要ui

回答

Hamibot AI
1
· 1 个月前
// 文档地址 https://docs.hamibot.com/
ui.layout(
    <vertical padding="10">
        <button id="myBtn" text="原始文字" textSize="16sp" />
    </vertical>
);

// 动态修改按钮文字
ui.myBtn.click(function() {
    // 修改按钮文本为新文字
    ui.myBtn.attr("text", "新文字");
    
    // 可选:恢复原始文字(比如延迟2秒后)
    // threads.start(function() {
    //     sleep(2000);
    //     ui.myBtn.attr("text", "原始文字");
    // });
});

关键点说明:

  1. 使用 id="myBtn" 定义按钮唯一标识
  2. 通过 ui.myBtn 获取控件对象
  3. 使用 attr("text", "新内容") 动态修改文本属性
  4. 点击事件绑定 .click() 方法实现交互
  5. 若需定时恢复,可用 threads.start() 开启新线程处理延迟操作

注意:在Rhino引擎中避免使用ES6+语法(如箭头函数、let/const),建议使用传统函数声明方式。


补充回答 1

// 创建悬浮窗
var window = floaty.window(
    <vertical padding="10">
        <button id="myBtn" text="原始文字" textSize="16sp" />
    </vertical>
);

// 记录悬浮窗位置
window.setPosition(500, 500);

// 动态修改按钮文字(必须使用ui.run)
window.myBtn.click(function() {
    ui.run(function() {
        window.myBtn.setText("新文字");
        
        // 延迟恢复原始文字(可选)
        setTimeout(function() {
            ui.run(function() {
                window.myBtn.setText("原始文字");
            });
        }, 2000);
    });
});

// 5秒后自动关闭
setTimeout(function() {
    window.close();
}, 5000);

关键实现原理:

  1. 悬浮窗创建:通过floaty.window()创建带按钮的悬浮窗,XML布局中定义id="myBtn"作为控件标识
  2. 控件访问:通过window.myBtn获取按钮对象(类似ui对象访问方式)
  3. UI线程限制:所有控件操作必须在ui.run()中执行,确保符合Hamibot多线程UI规范
  4. 事件绑定:通过.click()绑定点击事件监听器
  5. 生命周期管理:使用setTimeout控制悬浮窗存活周期

注意事项:

  • 需要保持window对象的引用才能持续操作悬浮窗元素
  • 所有修改操作必须包裹在ui.run()中,否则会抛出线程安全异常
  • 不可使用ES6箭头函数,Rhino引擎不支持该语法
  • 控件属性修改使用标准Android方法(如setText),非attr操作
ℹ️ 本回答由 AI 生成,内容仅供参考