var mainWindowconfig = floaty.rawWindow(
<vertical width="90%" maxWidth="500dp" backgroundColor="#ffffff" borderRadius="10dp" elevation="10">
<text text="参数配置" textSize="18sp" textStyle="bold"
padding="12dp" gravity="center" backgroundColor="#f5f5f5"
borderRadiusTopLeft="10dp" borderRadiusTopRight="10dp"/>

        <scrollview >
            <vertical>
                <vertical padding="16">
                    <text textSize="16" textStyle="bold">运行模式</text>
                    <spinner id="select_runtype" w="auto" h="auto" entries="单商品购买|循环购买" marginTop="8"/>
                </vertical>

                <vertical padding="16">
                    <text textSize="16" textStyle="bold">关键词</text>
                    <input id="text_word" hint="请输入群名称或好友名称的关键词" marginTop="8" />
                </vertical>

                <vertical padding="16">
                    <text textSize="16" textStyle="bold">商品名关键词</text>
                    <input id="prodect_text_word" hint="可选,输入商品名称关键词" marginTop="8" />
                </vertical>

                <vertical padding="16">
                    <text textSize="16" textStyle="bold">支付密码</text>
                    <input id="text_password" hint="不需要脚本输入密码填0" inputType="number" marginTop="8" />
                </vertical>

                <vertical padding="16">
                    <text textSize="16" textStyle="bold">购买方式</text>
                    <spinner id="select_getshopfun" w="auto" h="auto" entries="到店取|送到家|在线抽" marginTop="8"/>
                </vertical>

                <vertical padding="16">
                    <text textSize="16" textStyle="bold">规格选择</text>
                    <spinner id="select_type" w="auto" h="auto" entries="单个盲盒随机发货|整盒含*个盲盒" marginTop="8"/>
                </vertical>

                <vertical padding="16">
                    <text textSize="16" textStyle="bold">数量</text>
                    <input id="text_number" hint="例如填2" inputType="number" marginTop="8" />
                </vertical>

                <vertical padding="16">
                    <text textSize="16" textStyle="bold">最大刷新次数</text>
                    <input id="text_timeoutcount" hint="建议5000+" inputType="number" marginTop="8" />
                </vertical>

                <vertical padding="16">
                    <text textSize="16" textStyle="bold">单次刷新延时</text>
                    <input id="text_refush_timeout" hint="单位为ms(1s=1000ms)" inputType="number" marginTop="8" />
                </vertical>

                <vertical padding="16">
                    <text textSize="16" textStyle="bold">2刷总执行时长</text>
                    <input id="text_refush_timeout_tow" hint="单位为s,建议600-900" inputType="number" marginTop="8" />
                </vertical>

                <vertical padding="16">
                    <text textSize="16" textStyle="bold">2刷模式</text>
                    <spinner id="select_runtype_refush_two" w="auto" h="auto" entries="正常模式|无跳转模式|快速模式" marginTop="8"/>
                </vertical>

                <vertical padding="16">
                    <text textSize="16" textStyle="bold">无跳转模式每次动作延时</text>
                    <input id="text_refush_timeout_tow_delay" hint="单位为ms,建议100-200" inputType="number" marginTop="8" />
                </vertical>

                <horizontal padding="16" marginTop="8" marginBottom="16">
                    <button id="saveBtn" text="保存配置" gravity="center" weight="1" />
                    <button id="runBtn" text="开始运行" gravity="center" weight="1" marginLeft="8" />
                </horizontal>
            </vertical>
        </scrollview>
    </vertical>
);   15:30:08.809/E: Wrapped java.lang.NullPointerException: Attempt to invoke virtual method 'com.stardust.autojs.runtime.ScriptRuntime com.stardust.autojs.engine.RhinoJavaScriptEngine.getRuntime()' on a null object reference (file:///android_asset/modules/__floaty__.js#19)

Wrapped java.lang.NullPointerException: Attempt to invoke virtual method 'com.stardust.autojs.runtime.ScriptRuntime com.stardust.autojs.engine.RhinoJavaScriptEngine.getRuntime()' on a null object reference
at file:///android_asset/modules/floaty.js:19:0
at 685f66ce19934fa13300b8aa.js:204:0

已存档
七月CX · 1 个月前
第 1 条补充
·
1 个月前

去掉<scrollview > 就可以正常显示

第 2 条补充
·
1 个月前

<vertical>
<vertical padding="16">
<text textSize="16" textStyle="bold">数量</text>
<input id="text_number" hint="例如填2" inputType="number" marginTop="8" />
</vertical>

    <vertical padding="16">
        <text textSize="16" textStyle="bold">最大刷新次数</text>
        <input id="text_timeoutcount" hint="建议5000+" inputType="number" marginTop="8" />
    </vertical>

    <vertical padding="16">
        <text textSize="16" textStyle="bold">单次刷新延时</text>
        <input id="text_refush_timeout" hint="单位为ms(1s=1000ms)" inputType="number" marginTop="8" />
    </vertical>

    <vertical padding="16">
        <text textSize="16" textStyle="bold">2刷总执行时长</text>
        <input id="text_refush_timeout_tow" hint="单位为s,建议600-900" inputType="number" marginTop="8" />
    </vertical>

    <vertical padding="16">
        <text textSize="16" textStyle="bold">2刷模式</text>
        <spinner id="select_runtype_refush_two" w="auto" h="auto" entries="正常模式|无跳转模式|快速模式"></spinner>
    </vertical>

    <vertical padding="16">
        <text textSize="16" textStyle="bold">无跳转模式每次动作延时</text>
        <input id="text_refush_timeout_tow_delay" hint="单位为ms,建议100-200" inputType="number" marginTop="8" />
    </vertical>

    <horizontal padding="16" marginTop="8">
      <button id="saveBtn" text="保存配置" gravity="center" weight="1" />
      <button id="runBtn" text="开始运行" gravity="center" weight="1" marginLeft="8" />
    </horizontal>
</vertical> 我是想在悬浮窗内显示这些内容,显示结果不能与背景图有混淆,完全独立的背景 该怎么写

回答

Hamibot AI
1
· 1 个月前

根据你提供的代码和错误信息,问题可能出在以下几点:

  1. 代码结构问题

    • 你定义了 mainWindowconfig 变量但未使用,可能后续代码中存在对未正确初始化对象的引用
    • 错误堆栈指向 __floaty__.js 第19行,这可能与浮窗对象未正确初始化有关
  2. 可能的解决方案

    // 确保正确使用浮窗对象
    var mainWindow = floaty.rawWindow(
        <vertical width="90%" maxWidth="500dp" backgroundColor="#ffffff" borderRadius="10dp" elevation="10">
            <text text="参数配置" textSize="18sp" textStyle="bold" 
                  padding="12dp" gravity="center" backgroundColor="#f5f5f5"
                  borderRadiusTopLeft="10dp" borderRadiusTopRight="10dp"/>
            
            <scrollview >
                <vertical>
                    <!-- 所有控件定义 -->
                </vertical>
            </scrollview>
        </vertical>
    );
    
    // 添加错误检查
    if (mainWindow) {
        // 添加控件事件监听等操作
        mainWindow.saveBtn.onClick(function() {
            // 保存配置逻辑
        });
        
        mainWindow.runBtn.onClick(function() {
            // 启动逻辑
        });
    } else {
        toast("浮窗创建失败");
    }
    
  3. 注意事项

    • 确保脚本已获取无障碍服务和后台弹窗权限
    • 检查XML布局是否完整(如<vertical>标签是否正确闭合)
    • 避免在浮窗对象为null时调用任何方法
    • 如果使用AutoJS环境,需确保JavaScript引擎已正确初始化

建议在创建浮窗后添加空值检查,并确认所有控件ID与后续操作匹配。如果问题持续,可尝试简化布局逐步定位问题。


补充回答 1

根据你的描述,问题确实与 <scrollview> 标签的使用有关。在 AutoJS 的 floaty.rawWindow 中,某些版本或环境下 <scrollview> 标签可能无法正确解析,导致悬浮窗初始化失败,从而引发 NullPointerException


原因分析

  1. XML 解析问题
    AutoJS 的 floaty.rawWindow 对 XML 布局的兼容性可能有限,尤其是某些标签(如 <scrollview>)可能未被完全支持,导致布局加载失败,最终浮窗对象为 null

  2. 布局结构限制
    floaty.rawWindow 创建的是原始悬浮窗,对布局的复杂度(如嵌套滚动容器)可能有隐式限制。若未正确设置宽度、高度或父容器属性,可能触发异常。


解决方案

方案 1:移除 <scrollview> 标签

如果你的布局内容较少,可以直接移除 <scrollview>,将内容放在 <vertical> 中:

var mainWindow = floaty.rawWindow(
    <vertical width="90%" maxWidth="500dp" backgroundColor="#ffffff" borderRadius="10dp" elevation="10">
        <!-- 直接放置控件,无需 scrollview -->
        <text text="参数配置" ... />
        <vertical padding="16">
            <text textSize="16" textStyle="bold">运行模式</text>
            <spinner id="select_runtype" ... />
        </vertical>
        <!-- 其他控件 -->
    </vertical>
);

方案 2:使用 android:scrollbars 属性

如果必须使用滚动功能,可以尝试在 <vertical> 上添加 android:scrollbars="vertical" 属性(需确保 AutoJS 支持):

<vertical ... android:scrollbars="vertical">
    <!-- 内容 -->
</vertical>

方案 3:动态设置滚动(代码实现)

通过 JavaScript 动态控制滚动逻辑(需结合 Ui 模块):

var mainWindow = floaty.rawWindow(
    <vertical width="90%" maxWidth="500dp" backgroundColor="#ffffff" borderRadius="10dp" elevation="10">
        <text text="参数配置" ... />
        <vertical id="contentLayout" padding="16">
            <!-- 所有控件 -->
        </vertical>
    </vertical>
);

// 动态设置滚动(需 AutoJS 支持)
mainWindow.contentLayout.setScrollY(0); // 示例:设置滚动位置

注意事项

  1. 检查 AutoJS 版本
    确保使用的是支持 floaty.rawWindow 的 AutoJS Pro 版本(如 4.1.0+)。

  2. 布局兼容性测试
    如果需复杂布局,建议先用 floaty.window() 测试(自带调试按钮),再切换为 floaty.rawWindow

  3. 错误捕获
    在代码中添加空值检查:

    var mainWindow = floaty.rawWindow(...);
    if (!mainWindow) {
        toast("悬浮窗创建失败");
        exit();
    }
    

如果问题仍未解决,建议提供完整的脚本代码,可进一步分析具体上下文。


补充回答 2

为了确保悬浮窗内的内容与背景完全隔离并独立显示,可以通过以下方式优化布局结构并设置独立背景:


优化后的 XML 布局

<vertical width="90%" maxWidth="500dp" backgroundColor="#ffffff" borderRadius="10dp" elevation="10">
    <!-- 标题栏 -->
    <text text="参数配置" textSize="18sp" textStyle="bold" 
          padding="12dp" gravity="center" backgroundColor="#f5f5f5"
          borderRadiusTopLeft="10dp" borderRadiusTopRight="10dp"/>

    <!-- 内容区域 -->
    <vertical padding="16">
        <!-- 每个设置项独立背景 -->
        <vertical backgroundColor="#f9f9f9" padding="12" borderRadius="8" margin="8">
            <text textSize="16" textStyle="bold">数量</text>
            <input id="text_number" hint="例如填2" inputType="number" marginTop="8" />
        </vertical>

        <vertical backgroundColor="#f9f9f9" padding="12" borderRadius="8" margin="8">
            <text textSize="16" textStyle="bold">最大刷新次数</text>
            <input id="text_timeoutcount" hint="建议5000+" inputType="number" marginTop="8" />
        </vertical>

        <vertical backgroundColor="#f9f9f9" padding="12" borderRadius="8" margin="8">
            <text textSize="16" textStyle="bold">单次刷新延时</text>
            <input id="text_refush_timeout" hint="单位为ms(1s=1000ms)" inputType="number" marginTop="8" />
        </vertical>

        <vertical backgroundColor="#f9f9f9" padding="12" borderRadius="8" margin="8">
            <text textSize="16" textStyle="bold">2刷总执行时长</text>
            <input id="text_refush_timeout_tow" hint="单位为s,建议600-900" inputType="number" marginTop="8" />
        </vertical>

        <vertical backgroundColor="#f9f9f9" padding="12" borderRadius="8" margin="8">
            <text textSize="16" textStyle="bold">2刷模式</text>
            <spinner id="select_runtype_refush_two" w="auto" h="auto" entries="正常模式|无跳转模式|快速模式" />
        </vertical>

        <vertical backgroundColor="#f9f9f9" padding="12" borderRadius="8" margin="8">
            <text textSize="16" textStyle="bold">无跳转模式每次动作延时</text>
            <input id="text_refush_timeout_tow_delay" hint="单位为ms,建议100-200" inputType="number" marginTop="8" />
        </vertical>

        <!-- 按钮区域 -->
        <horizontal padding="16" marginTop="8" marginBottom="16">
            <button id="saveBtn" text="保存配置" gravity="center" weight="1" />
            <button id="runBtn" text="开始运行" gravity="center" weight="1" marginLeft="8" />
        </horizontal>
    </vertical>
</vertical>

关键优化点

  1. 独立背景设置

    • 每个设置项(如“数量”“最大刷新次数”)包裹在 <vertical> 中,并通过 backgroundColor="#f9f9f9" 设置浅色背景,确保与悬浮窗主背景区分。
    • 使用 borderRadius="8" 添加圆角边框,增强视觉隔离感。
  2. 布局结构清晰

    • 主容器使用 backgroundColor="#ffffff"(白色)和 elevation="10"(阴影)提升立体感。
    • 标题栏单独设计为 backgroundColor="#f5f5f5"(灰蓝色),与内容区域形成对比。
  3. 间距控制

    • 通过 padding="12"margin="8" 调整控件间距,避免内容拥挤。
  4. 兼容性保障

    • 移除 <scrollview> 标签,避免 AutoJS 的 XML 解析问题。
    • 确保所有标签闭合正确(如 <vertical></vertical> 匹配)。

代码调用示例

var mainWindow = floaty.rawWindow(
    <vertical width="90%" maxWidth="500dp" backgroundColor="#ffffff" borderRadius="10dp" elevation="10">
        <text
ℹ️ 本回答由 AI 生成,内容仅供参考