[autojs]ui线程中更新控件的值的问题
"ui";
ui.layout(
<vertical>
<button id="autoFloatWindow" text="开启悬浮窗" textSize="15sp" />
<button id="autoService" text="开启无障碍服务" textSize="15sp" />
<button id="fw" text="创建悬浮窗" />
<button id="fw2" text="悬浮窗滚动文字" />
</vertical>
);
ui.autoService.on("click", function () {
//弹出无障碍服务设置
app.startActivity({
action: "android.settings.ACCESSIBILITY_SETTINGS"
});
});
ui.autoFloatWindow.on("click", function () {
//申请悬浮窗
importClass(android.content.Intent);
importClass(android.net.Uri);
importClass(android.provider.Settings);
var intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + context.getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
app.startActivity(intent);
});
ui.fw.on("click", function () {
threads.start(function(){
w = floaty.rawWindow(
<frame gravity="center">
<text id="text">悬浮文字</text>
</frame>
);
});
});
ui.fw2.on("click", function () {
threads.start(function(){
w.setPosition(500, 500);
w.setTouchable(false);
ui.run(()=>{
w.text.setText("123");
});
sleep(3000)
ui.run(()=>{
w.text.setText("over!");
});
});
});
总结:
1、不能直接在线程中更新控制值,否则会提示autojs Only the original thread that created a view hierarchy can touch its错误
2、要更新控制值需要使用ui.run进行操作,可以尝试去掉代码中ui.run看看效果。你会发现只能更新到123就开始报错了。