|
|
很多新手喜欢用 `logWindow.show()` 弹个悬浮日志窗看运行状态,结果屏幕上飘一块白底方块,又卡又丑。AIWROK 的 `floatUI` 才是正确的可视化方案:用原生控件搭一个带背景、能拖动、能按钮控制的小控制台。
根布局必须铺背景
floatUI 窗口默认是白底。如果根布局不设 `android:background`,只要窗口被较宽的子控件(比如 200dp 面板)撑开,而窄的子控件没占满,就会露一大块白。给根布局铺上和面板同款深色即可解决:
- var ui = new floatUI();
- ui.loadXML(
- '<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" '
- + 'android:orientation="vertical" android:background="#222831" '
- + 'android:layout_width="wrap_content" android:layout_height="wrap_content">'
- + '<TextView android:id="log" android:text="等待中" '
- + 'android:textColor="#eeeeee" android:textSize="14sp"/></LinearLayout>'
- );
- var log = ui.findViewById("log");
复制代码
只认原生控件名
这是最容易踩的坑:`loadXML` 只认原生 Android 控件类名。写 `<root>`、`<vertical>`、`<frame>`、`<text>` 全都会报 `ClassNotFoundException`。一律用 `<LinearLayout>`、`<FrameLayout>`、`<TextView>`、`<Button>`,`android:id` 也不要写 `@+id`,直接 `android:id="log"`。
按钮控制线程池
控制台最大的价值是能随时暂停/继续/停止。按钮回调本身跑在 UI 线程,直接操作控件是安全的:
- var btn = ui.findViewById("stop");
- btn.setOnClickListener(function() {
- pool.stop();
- log.setText("已停止");
- ui.close();
- });
复制代码
关闭窗口一定要用实例的 `ui.close()`,不是 `new floatUI().closeAll()`——后者关的是 window 主窗口框架,关不掉你建的浮窗。稳妥起见再补一条 `try { window.closeAll() } catch (e) {}` 兜底。
拖动要用全类名
真机实测:短类名 `View`、`MotionEvent` 不是全局可用的,写 `new View.OnTouchListener` 会直接走 catch。先 `importClass(android.view.View)` 和 `importClass(android.view.MotionEvent)`,或用全类名。标题栏绑定 `OnTouchListener`,用 `e.getRawX()/getRawY()` 算位移就能拖动。
隐藏系统浮标
AIWROK 自带那个圆形 A 球浮标,正式跑脚本时可以用 `new floatUI().hideSystemFloat()` 藏起来,结束再 `showSystemFloat()`。
相关阅读
- 短信验证码中心AIWROK万能调用端
- clickPercent天然适配不同分辨率找控件点击
- floatUI深色控制台风格悬浮窗日志
|
|