"ui";
// 全局配置对象
let config = {
option: 'option1',
textValue: '',
// 其他配置参数...
};
// 主界面UI
function createMainUI() {
ui.run(() => {
ui.layout(
<frame>
<dialog id="mainDialog" fixedToTop="true" autoCancel="false">
<vertical padding="16" gravity="center">
<text text="主界面" textSize="20sp" marginBottom="24" />
<linear layout_width="match_parent" gravity="center">
<button id="startBtn" text="开始" layout_width="0" layout_weight="1" marginRight="8"
/>
<button id="configBtn" text="配置" layout_width="0" layout_weight="1"
/>
<button id="exitBtn" text="退出" layout_width="0" layout_weight="1" marginLeft="8"
/>
</linear>
</vertical>
</dialog>
</frame>
);
// 设置按钮点击事件
ui.run(() => {
ui.findView('mainDialog').show();
// 开始按钮点击事件
ui.findView('startBtn').on('click', () => {
toast("开始执行任务");
// 这里添加开始执行的代码
});
// 配置按钮点击事件
ui.findView('configBtn').on('click', () => {
ui.findView('mainDialog').dismiss();
// 显示配置界面
setTimeout(() => {
createConfigUI();
}, 100);
});
// 退出按钮点击事件
ui.findView('exitBtn').on('click', () => {
ui.findView('mainDialog').dismiss();
// 退出应用逻辑
exit();
});
});
});
}
// 配置界面UI
function createConfigUI() {
ui.run(() => {
ui.layout(
<frame>
<dialog id="configDialog" fixedToTop="true" autoCancel="false">
<vertical padding="16" gravity="center">
<text text="参数配置" textSize="20sp" marginBottom="24" />
<!-- 单选框组 -->
<text text="选择一个选项:" marginBottom="8" />
<radiogroup id="radioGroup" orientation="vertical" marginBottom="16">
<radiobutton text="选项1" id="option1" />
<radiobutton text="选项2" id="option2" />
<radiobutton text="选项3" id="option3" />
</radiogroup>
<!-- 文本输入框 -->
<text text="输入文本:" marginBottom="8" />
<edittext
id="textInput"
hint="请输入文本"
marginBottom="24"
/>
<!-- 关闭按钮 -->
<button
id="closeConfigBtn"
text="关闭"
layout_width="match_parent"
/>
</vertical>
</dialog>
</frame>
);
// 显示配置对话框并设置事件
ui.run(() => {
ui.findView('configDialog').show();
// 设置单选框初始选中状态
ui.findView(config.option).setChecked(true);
// 设置文本输入框的值
ui.findView('textInput').setText(config.textValue);
// 关闭按钮点击事件
ui.findView('closeConfigBtn').on('click', () => {
// 保存配置
const radioGroup = ui.findView('radioGroup');
const checkedId = radioGroup.getCheckedRadioButtonId();
if (checkedId !== -1) {
const checkedRadio = ui.findView(checkedId);
config.option = checkedRadio.id();
}
config.textValue = ui.findView('textInput').getText();
// 关闭配置对话框
ui.findView('configDialog').dismiss();
// 显示主界面
setTimeout(() => {
createMainUI();
}, 100);
});
});
});
}
// 启动应用
function main() {
// 确保在UI线程中运行
ui.run(() => {
// 初始化UI
createMainUI();
});
}
// 执行主函数
main();
运行报错
17:45:00.357/D: { [JavaException: android.view.InflateException: org.xml.sax.SAXParseException: name expected (position:START_TAG <com.stardust.autojs.core.ui.widget.JsButton android:id='@+id/startBtn' android:text='开始' android:layout_width='0' android:layout_weight='1' android:layout_marginRight='8dp' android:onClick=' () => { toast('>@31:12 in java.io.InputStreamReader@6e3b7a2) ]
fileName: 'file:///android_asset/modules/ui.js',
lineNumber: 18 }

已存档
七月CX · 2 个月前

回答

Hamibot AI
1
· 2 个月前

文档地址 https://docs.hamibot.com/

你的代码有几个问题需要修正:

  1. 按钮的onClick属性不能直接使用箭头函数,这是Rhino引擎不支持的语法
  2. 布局XML中不能直接使用JavaScript代码
  3. 需要正确设置按钮的宽度和权重

以下是修正后的代码:

"ui";
// 全局配置对象
let config = {
    option: 'option1',
    textValue: '',
    // 其他配置参数...
};

// 主界面UI
function createMainUI() {
    ui.layout(
        <frame>
            <dialog id="mainDialog">
                <vertical padding="16" gravity="center">
                    <text text="主界面" textSize="20sp" marginBottom="24"/>
                    <linear layout_width="match_parent" gravity="center">
                        <button id="startBtn" text="开始" layout_width="0" layout_weight="1" marginRight="8"/>
                        <button id="configBtn" text="配置" layout_width="0" layout_weight="1"/>
                        <button id="exitBtn" text="退出" layout_width="0" layout_weight="1" marginLeft="8"/>
                    </linear>
                </vertical>
            </dialog>
        </frame>
    );

    ui.startBtn.click(function(){
        toast("开始执行任务");
    });

    ui.configBtn.click(function(){
        ui.mainDialog.dismiss();
        setTimeout(createConfigUI, 100);
    });

    ui.exitBtn.click(function(){
        ui.mainDialog.dismiss();
        exit();
    });

    ui.mainDialog.show();
}

// 配置界面UI
function createConfigUI() {
    ui.layout(
        <frame>
            <dialog id="configDialog">
                <vertical padding="16" gravity="center">
                    <text text="参数配置" textSize="20sp" marginBottom="24"/>
                    <text text="选择一个选项:" marginBottom="8"/>
                    <radiogroup id="radioGroup" orientation="vertical" marginBottom="16">
                        <radiobutton text="选项1" id="option1"/>
                        <radiobutton text="选项2" id="option2"/>
                        <radiobutton text="选项3" id="option3"/>
                    </radiogroup>
                    <text text="输入文本:" marginBottom="8"/>
                    <edittext id="textInput" hint="请输入文本" marginBottom="24"/>
                    <button id="closeConfigBtn" text="关闭" layout_width="match_parent"/>
                </vertical>
            </dialog>
        </frame>
    );

    ui[config.option].setChecked(true);
    ui.textInput.setText(config.textValue);

    ui.closeConfigBtn.click(function(){
        config.option = ui.radioGroup.getCheckedRadioButtonId();
        config.textValue = ui.textInput.getText();
        ui.configDialog.dismiss();
        setTimeout(createMainUI, 100);
    });

    ui.configDialog.show();
}

// 启动应用
createMainUI();

hamibot.exit();

主要修改:

  1. 移除了XML中的onClick属性
  2. 使用标准的ui.控件名.click(function(){...})方式绑定事件
  3. 简化了代码结构,移除了多余的ui.run()调用
  4. 直接使用ui.控件名访问视图对象

这样修改后应该可以正常运行了。

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