Autojs页面开发
阅读原文时间:2023年07月08日阅读:1

Autojs功能很强大!  可以打包成apk文件装在手机里运行,也可以做页面UI级别的开发、本文主要对基础页面开发常用方法、demo、资料做收集, 属于比较基础的文章、大佬请略过………

基于:Auto.js Pro版本,免费版本很多功能限制,不建议使用

1.输入并获取输入的内容

"ui";

var color = "#009688";

ui.layout(
{/* */} {/* center居中、 marginTop文字大小、w、h宽高、bg字体颜色*/} ¨C12C ¨C13C ¨C14C ¨C15C ¨C16C ¨C17C ¨C18C ¨C19C ¨C20C ¨C21C ¨C22C ¨C23C
);

//创建选项菜单(右上角)
ui.emitter.on("create_options_menu", menu => {
menu.add("日志");
menu.add("关于");
});

//监听选项菜单点击
ui.emitter.on("options_item_selected", (e, item) => {
switch (item.getTitle()) {
case "日志":
app.startActivity("console");//跳转到控制台
break;
case "关于":
alert("关于", "定制脚本找九黎q1906507927");//弹框
break;
}
e.consumed = true;
});
//展示右上角…
activity.setSupportActionBar(ui.toolbar);
ui.menu.on("item_click", item => {
switch (item.title) {
case "退出":
ui.finish();
break;
}
})

//两次才能返回
threads.start(function () {
var isCanFinish = false;
var isCanFinishTimeout;
ui.emitter.on("back_pressed", e => {
if (!isCanFinish) {
isCanFinish = true;
isCanFinishTimeout = setTimeout(() => {
toastLog("再返回一次就失去我了哟![表情][表情]");
isCanFinish = false;
}, 500);
e.consumed = true;
} else {
clearTimeout(isCanFinishTimeout);
e.consumed = false;
};
});
setInterval(() => { }, 1000)
});

//点击运行按钮触发
ui.start.on("click", function() {
if(ui.yc.text()) {
toastLog('关注滑动延迟'+ui.sjS.text()+'秒至'+ui.sjE.text()+'秒')//获取id为sjS的值
toastLog('关注每单延时'+ui.mdyc.text())//获取id为mdyc的值
toastLog('关注总次数'+ui.yc.text())//获取id为yc的值
toastLog('关注总次数-通过attr获取'+ui.yc.attr("text"))

}else {  
    toastLog('点击运行按钮无效')  
}  

})

//获取文本的值(id与yc的text)
let text = $ui.yc.attr("text");
toastLog(text)

2.判断并开启悬浮窗和无障碍服务

"ui";

//启动后就会展示ui.layout
ui.layout(



)

ui.webview.loadUrl("http://www.autojs.org");

// ______________________________________卡片功能__________________________________________________
"ui";
ui.layout(


);
//触发调用showLoginUI函数(从注册条登录)
ui.cancel.on("click", () => showLoginUI());

//绑定id为login的点击事件(注册)  
ui.chen\_login.on("click", () => {  
    toastLog("注册的用户名为" + ui.register\_name.text() + " 注册密码为" + ui.register\_password.text() + " 注册邮箱为" + ui.register\_emali.text());  
});  

}

7.各种对话框

8.控制台或日志

9.悬浮窗

ui模式下,必须在线程里创建悬浮窗,否则就卡死了

////____________________________________________顶部悬浮窗_______________________________________________________________
////悬浮框布局样式
var window = floaty.window(

);

window.exitOnClose();

////启动窗口
window.text.click(() => {
window.setAdjustEnabled(!window.isAdjustEnabled());
});

setInterval(() => {
////对控件的操作需要在UI线程中执行
ui.run(function() {
window.text.setText(dynamicText());
});
}, 1000);

////需要显示的内容
function dynamicText() {
var date = new Date();
var str = util.format("时间: %d:%d:%d\n", date.getHours(), date.getMinutes(), date.getSeconds());

////getMemoryUsage获取内存使用率  
str += util.format("内存使用量: %d%%\\n", getMemoryUsage());  
str += "当前活动: " + currentActivity() + "\\n";  
str += "当前包名: " + currentPackage();  
return str;  

}

////获取内存使用率
function getMemoryUsage() {
var usage = (100 * device.getAvailMem() / device.getTotalMem());
////保留一位小数
return Math.round(usage * 10) / 10;
}

////__________________________________简单悬浮窗_______________________________________________

////悬浮框布局样式
var window = floaty.window(
的点点滴滴多
);

//// 设置悬浮窗的位置
window.setPosition(500, 500);

setTimeout(()=>{
////2秒后关闭窗口
obj.close();
}, 8000);

////________________________________文件打印悬浮________________________________________________
////悬浮框布局样式
var window = floaty.window(
的点点滴滴多
);

//// 5秒后关闭窗口
setTimeout(()=>{
window.close();
}, 7000);

////运行
ui.run(function(){
//// obj对应窗口返回的对象
//// text对应节点的ID
window.text.setText("DEBUG:当前值为50");

window.text.setText("DEBUG:计算后值为2500");  
setTimeout(function(){  
    window.text.setText("ERROR:当前计算的数字不对,程序即将退出!");  
}, 2000); 

});

////_____________________________________UI下的悬浮窗_____________________________________________
"ui";
ui.layout(

);

ui.autoService.on("check", function(checked) {
if(checked) {
toastLog("开关状态:"+ui.autoService.checked)
toastLog("开")
}else{
toastLog("关")
}
});

////悬浮窗
function createFloaty() {
////悬浮框布局样式
window = floaty.window(
的点点滴滴多
)};

/////运行悬浮窗
threads.start(function () {
createFloaty();
window.text.setText("DEBUG:当前值为50");
window.text.setText("DEBUG:计算后值为2500");
sleep(4000);
ui.run(() => {
window.text.setText("ERROR:当前计算的数字不对,程序即将退出!");
});
});

////_____________________________________日志打印到悬浮窗______________________________________
////自定义悬浮窗-控制台
window = floaty.rawWindow(

)

window.setPosition(0, 0);////定义控制台位置

////调用log并打印日志
function Log(a) {
let sz = window.控制台.text().split("\n")
////日志大于6条就刷新悬浮窗屏幕
if (sz.length > 6) {
sz.shift();
}
sz.push(时间()+a)
window.控制台.setText(sz.join("\n"))
}

////获取当前时间
function 时间() {
var mydate = new Date();
var 小时 = mydate.getHours().toString();
var 分钟 = mydate.getMinutes().toString();
var 秒数 = mydate.getSeconds().toString();
if(小时.length==1){
小时="0"+小时
}
if(分钟.length==1){
分钟="0"+分钟
}
if(秒数.length==1){
秒数="0"+秒数
}
return "["+小时+":"+分钟+":"+秒数+"] "
}

// //控制需要打印的内容,,setInterval周期定时循环执行
// i=10
// setInterval(() => {
// Log(i)//每次i加一
// i++
// }, 1000);

// //控制需要打印的内容,,setInterval周期定时循环执行
var timesRun = 0;
//2秒执行一次,当timesRun等于60就结束循环
var interval = setInterval(function(){
Log(timesRun)//每次i加一
timesRun += 1;
if(timesRun === 20){
clearInterval(interval);
engines.myEngine().forceStop();//停止脚本
}

}, 1000);

////_____________________________________UI模式下悬浮窗日志______________________________________
"ui";

//启动后就会展示ui.layout
ui.layout(