diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 09d75975..f3393090 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/build.gradle b/app/build.gradle index d7af1f9a..7612b414 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "org.autojs.autojs" minSdkVersion 17 targetSdkVersion 23 - versionCode 400 - versionName "4.0.0 Alpha" + versionCode 401 + versionName "4.0.0 Alpha1" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true ndk { diff --git a/app/src/main/assets/docs/all.html b/app/src/main/assets/docs/all.html index cd139783..ff284e87 100644 --- a/app/src/main/assets/docs/all.html +++ b/app/src/main/assets/docs/all.html @@ -210,6 +210,22 @@
callback <Function> 回调函数,可选。当用户点击确定时被调用,一般用于ui模式。显示一个多选列表对话框,等待用户选择,返回用户选择的选项索引的数组。如果用户取消了选择,返回[]。
在ui模式下该函数返回一个Promise。
-
在ui模式下该函数返回一个Promise。
properties <Object> 对话框属性,用于配置对话框。创建一个可自定义的对话框,例如:
+dialogs.build({
+ //对话框标题
+ title: "发现新版本",
+ //对话框内容
+ content: "更新日志: 新增了若干了BUG",
+ //确定键内容
+ positive: "下载",
+ //取消键内容
+ negative: "取消",
+ //中性键内容
+ neutral: "到浏览器下载",
+ //勾选框内容
+ checkBoxPrompt: "不再提示"
+}).on("positive", ()=>{
+ //监听确定键
+ toast("开始下载....");
+}).on("neutral", ()=>{
+ //监听中性键
+ app.openUrl("https://www.autojs.org");
+}).on("check", (checked)=>{
+ //监听勾选框
+ log(checked);
+}).show();
+选项properties可供配置的项目为:
+title <string> 对话框标题titleColor <string> | <number> 对话框标题的颜色buttonRippleColor <string> | <number> 对话框按钮的波纹效果颜色icon <string> | <Image> 对话框的图标,是一个URL或者图片对象 content <string> 对话框文字内容 contentColor<string> | <number> 对话框文字内容的颜色contentLineSpacing<number> 对话框文字内容的行高倍数,1.0为一倍行高items <Array> 对话框列表的选项itemsColor <string> | <number> 对话框列表的选项的文字颜色itemsSelectMode <string> 对话框列表的选项选择模式,可以为:select 普通选择模式singleChoice 单选模式multiChoice 多选模式itemsSelectedIndex <number> | <Array> 对话框列表中???positive <string> 对话框确定按钮的文字内容(最右边按钮)positiveColor <string> | <number> 对话框确定按钮的文字颜色(最右边按钮)neutral <string> 对话框中立按钮的文字内容(最左边按钮)neutralColor <string> | <number> 对话框中立按钮的文字颜色(最左边按钮)negative <string> 对话框取消按钮的文字内容(确定按钮左边的按钮)negativeColor <string> | <number> 对话框取消按钮的文字颜色(确定按钮左边的按钮)checkBoxPrompt <string> 勾选框文字内容checkBoxChecked <boolean> 勾选框是否勾选 progress <Object> 配置对话框进度条的对象:
+cancelable <boolean> 对话框是否可取消,如果为false,则对话框只能用代码手动取消canceledOnTouchOutside <boolean> 对话框是否在点击对话框以外区域时自动取消,默认为trueinputHint <string> 对话框的输入框的输入提示inputPrefill <string> 对话框输入框的默认输入内容通过这些选项可以自定义一个对话框,并通过监听返回的Dialog对象的按键、输入事件来实现交互。下面是一些例子。
+模拟alert对话框:
+dialogs.build({
+ title: "你好",
+ content: "今天也要元气满满哦",
+ positive: "好的"
+}).show();
+模拟confirm对话框:
+dialogs.build({
+ title: "你好",
+ content: "请问你是笨蛋吗?",
+ positive: "是的",
+ negative: "我是大笨蛋"
+}).on("positive", ()=>{
+ alert("哈哈哈笨蛋");
+}).on("negative", ()=>{
+ alert("哈哈哈大笨蛋");
+}).show();
+模拟单选框:
+dialogs.build({
+ title: "单选",
+ items: ["选项1", "选项2", "选项3", "选项4"],
+ itemsSelectMode: "singleChoice",
+ itemsSelectedIndex: 3
+}).on("item_select", (index, item)->{
+ toast("您选择的是" + item);
+}).show();
+"处理中"对话框:
+var d = dialogs.build({
+ title: "下载中...",
+ progress: {
+ max: -1
+ },
+ cancelable: false
+}).show();
+
+setTimeout(()=>{
+ d.dismiss();
+}, 3000);
+输入对话框:
+dialogs.build({
+ title: "请输入您的年龄",
+ inputPrefill: "18"
+}).on("input", (input)=>{
+ var age = parseInt(input);
+ toastLog(age);
+}).show();
+使用这个函数来构造对话框,一个明显的不同是需要使用回调函数而不能像dialogs其他函数一样同步地返回结果;但也可以通过threads模块的方法来实现。例如显示一个输入框并获取输入结果为:
+var input = threads.disposable();
+dialogas.build({
+ title: "请输入您的年龄",
+ inputPrefill: "18"
+}).on("input", text => {
+ input.setAndNotify(text);
+}).show();
+var age = parseInt(input.blockedGet());
+tosatLog(age);
+dialogs.build()返回的对话框对象,内置一些事件用于响应用户的交互,也可以获取对话框的状态和信息。
show#dialog <Dialog> 对话框对话框显示时会触发的事件。例如:
+dialogs.build({
+ title: "标题"
+}).on("show", (dialog)=>{
+ toast("对话框显示了");
+}).show();
+cancel#dialog <Dialog> 对话框对话框被取消时会触发的事件。一个对话框可能按取消按钮、返回键取消或者点击对话框以外区域取消。例如:
+dialogs.build({
+ title: "标题",
+ positive: "确定",
+ negative: "取消"
+}).on("cancel", (dialog)=>{
+ toast("对话框取消了");
+}).show();
+dismiss#dialog <Dialog> 对话框对话框消失时会触发的事件。对话框被取消或者手动调用dialog.dismiss()函数都会触发该事件。例如:
var d = dialogs.build({
+ title: "标题",
+ positive: "确定",
+ negative: "取消"
+}).on("dismiss", (dialog)=>{
+ toast("对话框消失了");
+}).show();
+
+setTimeout(()=>{
+ d.dismiss();
+}, 5000);
+positive#dialog <Dialog> 对话框确定按钮按下时触发的事件。例如:
+var d = dialogs.build({
+ title: "标题",
+ positive: "确定",
+ negative: "取消"
+}).on("positive", (dialog)=>{
+ toast("你点击了确定");
+}).show();
+negative#dialog <Dialog> 对话框取消按钮按下时触发的事件。例如:
+var d = dialogs.build({
+ title: "标题",
+ positive: "确定",
+ negative: "取消"
+}).on("negative", (dialog)=>{
+ toast("你点击了取消");
+}).show();
+neutral#dialog <Dialog> 对话框中性按钮按下时触发的事件。例如:
+var d = dialogs.build({
+ title: "标题",
+ positive: "确定",
+ negative: "取消",
+ neutral: "稍后提示"
+}).on("positive", (dialog)=>{
+ toast("你点击了稍后提示");
+}).show();
+any#dialog <Dialog> 对话框action <string> 被点击的按钮,可能的值为:positive 确定按钮 negative 取消按钮neutral 中性按钮任意按钮按下时触发的事件。例如:
+var d = dialogs.build({
+ title: "标题",
+ positive: "确定",
+ negative: "取消",
+ neutral: "稍后提示"
+}).on("any", (action, dialog)=>{
+ if(action == "positive"){
+ toast("你点击了确定");
+ }else if(action == "negative"){
+ toast("你点击了取消");
+ }
+}).show();
+item_select#对话框列表(itemsSelectMode为"select")的项目被点击选中时触发的事件。例如:
+var d = dialogs.build({
+ title: "请选择",
+ positive: "确定",
+ negative: "取消",
+ items: ["A", "B", "C", "D"],
+ itemsSelectMode: "select"
+}).on("item_select", (index, item, dialog)=>{
+ toast("您选择的是第" + (index + 1) + "项, 选项为" + item);
+}).show();
+single_choice#对话框单选列表(itemsSelectMode为"singleChoice")的项目被选中并点击确定时触发的事件。例如:
+var d = dialogs.build({
+ title: "请选择",
+ positive: "确定",
+ negative: "取消",
+ items: ["A", "B", "C", "D"],
+ itemsSelectMode: "singleChoice"
+}).on("item_select", (index, item, dialog)=>{
+ toast("您选择的是第" + (index + 1) + "项, 选项为" + item);
+}).show();
+multi_choice#对话框多选列表(itemsSelectMode为"multiChoice")的项目被选中并点击确定时触发的事件。例如:
+var d = dialogs.build({
+ title: "请选择",
+ positive: "确定",
+ negative: "取消",
+ items: ["A", "B", "C", "D"],
+ itemsSelectMode: "multiChoice"
+}).on("item_select", (indices, items, dialog)=>{
+ toast(util.format("您选择的项目为%o, 选项为%o", indices, items);
+}).show();
+input#text <string> 输入框的内容dialog <Dialog> 对话框带有输入框的对话框当点击确定时会触发的事件。例如:
+dialogs.build({
+ title: "请输入",
+ positive: "确定",
+ negative: "取消",
+ inputPrefill: ""
+}).on("input", (text, dialog)=>{
+ toast("你输入的是" + text);
+}).show();
+input_change#text <string> 输入框的内容dialog <Dialog> 对话框对话框的输入框的文本发生变化时会触发的事件。例如:
+dialogs.build({
+ title: "请输入",
+ positive: "确定",
+ negative: "取消",
+ inputPrefill: ""
+}).on("input_change", (text, dialog)=>{
+ toast("你输入的是" + text);
+}).show();
+
engines模块包含了一些与脚本环境、脚本运行、脚本引擎有关的函数,包括运行其他脚本,关闭脚本等。
@@ -2404,6 +2746,7 @@ setInterval(()=>{}, 1000);layout <xml> | <View> 悬浮窗界面的XML或者View指定悬浮窗的布局,创建并显示一个悬浮窗,返回一个FloatyWindow对象。
该悬浮窗自带关闭、调整大小、调整位置按键,可根据需要调用setAdjustEnabled()函数来显示或隐藏。
其中layout参数可以是xml布局或者一个View,更多信息参见ui模块的说明。
例子:
var w = floaty.window(
@@ -2419,40 +2762,116 @@ setTimeout(()=>{
ui.run(function(){
w.text.setText("文本");
});
-
floaty.closeAll()#
+有关返回的FloatyWindow对象的说明,参见下面的FloatyWindow章节。
layout <xml> | <View> 悬浮窗界面的XML或者View指定悬浮窗的布局,创建并显示一个原始悬浮窗,返回一个FloatyRawWindow对象。
与floaty.window()函数不同的是,该悬浮窗不会增加任何额外设施(例如调整大小、位置按钮),您可以根据自己需要编写任何布局。
而且,该悬浮窗支持完全全屏,可以覆盖状态栏,因此可以做护眼模式之类的应用。
+var w = floaty.rawWindow(
+ <frame gravity="center">
+ <text id="text">悬浮文字</text>
+ </frame>
+);
+
+w.setPosition(500, 500);
+
+setTimeout(()=>{
+ w.close();
+}, 2000);
+这段代码运行后将会在屏幕上显示悬浮文字,并在两秒后消失。
+有关返回的FloatyRawWindow对象的说明,参见下面的FloatyRawWindow章节。
关闭所有本脚本的悬浮窗。
悬浮窗对象,可通过FloatyWindow.{id}获取悬浮窗界面上的元素。例如, 悬浮窗window上一个控件的id为aaa, 那么window.aaa即可获取到该控件,类似于ui。
enabled <boolean> 是否启用悬浮窗调整(大小、位置)如果enabled为true,则在悬浮窗左上角、右上角显示可供位置、大小调整的标示,就像控制台一样; 如果enabled为false,则隐藏上述标示。
-设置悬浮窗位置。
-返回悬浮窗位置的X坐标。
-返回悬浮窗位置的Y坐标。
-设置悬浮窗宽高。
-返回悬浮窗宽度。
-返回悬浮窗高度。
-关闭悬浮窗。如果悬浮窗已经是关闭状态,则此函数将不执行任何操作。
被关闭后的悬浮窗不能再显示。
-使悬浮窗被关闭时自动结束脚本运行。
+原始悬浮窗对象,可通过window.{id}获取悬浮窗界面上的元素。例如, 悬浮窗window上一个控件的id为aaa, 那么window.aaa即可获取到该控件,类似于ui。
touchable <Boolean> 是否可触摸设置悬浮窗是否可触摸,如果为true, 则悬浮窗将接收到触摸、点击等事件并且无法继续传递到悬浮窗下面;如果为false, 悬浮窗上的触摸、点击等事件将被直接传递到悬浮窗下面。处于安全考虑,被悬浮窗接收的触摸事情无法再继续传递到下层。
+可以用此特性来制作护眼模式脚本。
+var w = floaty.rawWindow(
+ <frame gravity="center" bg="#44ffcc00"/>
+);
+
+w.setSize(-1, -1);
+w.setTouchable(false);
+
+setTimeout(()=>{
+ w.close();
+}, 4000);
+设置悬浮窗位置。
+返回悬浮窗位置的X坐标。
+返回悬浮窗位置的Y坐标。
+设置悬浮窗宽高。
+特别地,如果设置为-1,则为占满全屏;设置为-2则为根据悬浮窗内容大小而定。例如:
+var w = floaty.rawWindow(
+ <frame gravity="center" bg="#77ff0000">
+ <text id="text">悬浮文字</text>
+ </frame>
+);
+
+w.setSize(-1, -1);
+
+setTimeout(()=>{
+ w.close();
+}, 2000);
+返回悬浮窗宽度。
+返回悬浮窗高度。
+关闭悬浮窗。如果悬浮窗已经是关闭状态,则此函数将不执行任何操作。
+被关闭后的悬浮窗不能再显示。
+使悬浮窗被关闭时自动结束脚本运行。
@@ -2842,6 +3261,20 @@ for(var i = 0; i < 100; i++){调用该函数时会判断运行脚本的Auto.js的版本号,如果没有达到要求则抛出异常。
version参数可以是整数表示版本号,例如requiresAutojsVersion(250);也可以是字符串格式表示的版本,例如"3.0.0 Beta", "3.1.0 Alpha4", "3.2.0"等。
可以通过app.autojs.versionCode和app.autojs.versionName获取当前的Auto.js版本号和版本。
permissions <Array> 权限的字符串数组动态申请安卓的权限。例如:
+//请求GPS权限
+runtime.requestPermission(["access_fine_location"]);
+尽管安卓有很多权限,但必须写入Manifest才能动态申请,为了防止权限的滥用,目前Auto.js只能额外申请两个权限:
+access_fine_location GPS权限record_audio 录音权限您可以通过APK编辑器来增加Auto.js以及Auto.js打包的应用的权限。
+安卓所有的权限列表参见Permissions Overview。(并没有用)
全局变量。一个android.content.Context对象。
注意该对象为ApplicationContext,因此不能用于界面、对话框等的创建。 @@ -3128,7 +3561,31 @@ for(var headerName in res.headers){
返回两个颜色是否相等。*注意该函数会忽略Alpha通道的值进行比较。
log(colors.equals("#112233", "#112234"));
log(colors.equals(0xFF112233, 0xFF223344));
-黑色,颜色值 #FF000000
+深灰色,颜色值 #FF444444
+灰色,颜色值 #FF888888
+亮灰色,颜色值 #FFCCCCCC
+白色,颜色值 #FFFFFFFF
+红色,颜色值 #FFFF0000
+绿色,颜色值 #FF00FF00
+蓝色,颜色值 #FF0000FF
+黄色,颜色值 #FFFFFF00
+青色,颜色值 #FF00FFFF
+品红色,颜色值 #FFFF00FF
+透明,颜色值 #00000000
+images模块提供了一些手机设备中常见的图片处理函数,包括截图、读写图片、图片剪裁、找色、找图等。
返回图片image在点(x, y)处的像素的ARGB值。
该值的格式为0xAARRGGBB,是一个"32位整数"(虽然JavaScript中并不区分整数类型和其他数值类型)。
坐标系以图片左上角为原点。以图片左侧边为y轴,上侧边为x轴。
+img <Image> 图片复制一张图片并返回新的副本。该函数会完全复制img对象的数据。
image <image> 图片image <Image> 图片path <string> 路径format <string> 图片格式,可选的值为:png结合画笔canvas可以绘制基本图形、图片等。
+显示一个多选列表对话框,等待用户选择,返回用户选择的选项索引的数组。如果用户取消了选择,返回[]。
在ui模式下该函数返回一个Promise。
properties <Object> 对话框属性,用于配置对话框。创建一个可自定义的对话框,例如:
+dialogs.build({
+ //对话框标题
+ title: "发现新版本",
+ //对话框内容
+ content: "更新日志: 新增了若干了BUG",
+ //确定键内容
+ positive: "下载",
+ //取消键内容
+ negative: "取消",
+ //中性键内容
+ neutral: "到浏览器下载",
+ //勾选框内容
+ checkBoxPrompt: "不再提示"
+}).on("positive", ()=>{
+ //监听确定键
+ toast("开始下载....");
+}).on("neutral", ()=>{
+ //监听中性键
+ app.openUrl("https://www.autojs.org");
+}).on("check", (checked)=>{
+ //监听勾选框
+ log(checked);
+}).show();
+选项properties可供配置的项目为:
+title <string> 对话框标题titleColor <string> | <number> 对话框标题的颜色buttonRippleColor <string> | <number> 对话框按钮的波纹效果颜色icon <string> | <Image> 对话框的图标,是一个URL或者图片对象 content <string> 对话框文字内容 contentColor<string> | <number> 对话框文字内容的颜色contentLineSpacing<number> 对话框文字内容的行高倍数,1.0为一倍行高items <Array> 对话框列表的选项itemsColor <string> | <number> 对话框列表的选项的文字颜色itemsSelectMode <string> 对话框列表的选项选择模式,可以为:select 普通选择模式singleChoice 单选模式multiChoice 多选模式itemsSelectedIndex <number> | <Array> 对话框列表中???positive <string> 对话框确定按钮的文字内容(最右边按钮)positiveColor <string> | <number> 对话框确定按钮的文字颜色(最右边按钮)neutral <string> 对话框中立按钮的文字内容(最左边按钮)neutralColor <string> | <number> 对话框中立按钮的文字颜色(最左边按钮)negative <string> 对话框取消按钮的文字内容(确定按钮左边的按钮)negativeColor <string> | <number> 对话框取消按钮的文字颜色(确定按钮左边的按钮)checkBoxPrompt <string> 勾选框文字内容checkBoxChecked <boolean> 勾选框是否勾选 progress <Object> 配置对话框进度条的对象:
+cancelable <boolean> 对话框是否可取消,如果为false,则对话框只能用代码手动取消canceledOnTouchOutside <boolean> 对话框是否在点击对话框以外区域时自动取消,默认为trueinputHint <string> 对话框的输入框的输入提示inputPrefill <string> 对话框输入框的默认输入内容通过这些选项可以自定义一个对话框,并通过监听返回的Dialog对象的按键、输入事件来实现交互。下面是一些例子。
+模拟alert对话框:
+dialogs.build({
+ title: "你好",
+ content: "今天也要元气满满哦",
+ positive: "好的"
+}).show();
+模拟confirm对话框:
+dialogs.build({
+ title: "你好",
+ content: "请问你是笨蛋吗?",
+ positive: "是的",
+ negative: "我是大笨蛋"
+}).on("positive", ()=>{
+ alert("哈哈哈笨蛋");
+}).on("negative", ()=>{
+ alert("哈哈哈大笨蛋");
+}).show();
+模拟单选框:
+dialogs.build({
+ title: "单选",
+ items: ["选项1", "选项2", "选项3", "选项4"],
+ itemsSelectMode: "singleChoice",
+ itemsSelectedIndex: 3
+}).on("item_select", (index, item)->{
+ toast("您选择的是" + item);
+}).show();
+"处理中"对话框:
+var d = dialogs.build({
+ title: "下载中...",
+ progress: {
+ max: -1
+ },
+ cancelable: false
+}).show();
+setTimeout(()=>{
+ d.dismiss();
+}, 3000);
+输入对话框:
+dialogs.build({
+ title: "请输入您的年龄",
+ inputPrefill: "18"
+}).on("input", (input)=>{
+ var age = parseInt(input);
+ toastLog(age);
+}).show();
+使用这个函数来构造对话框,一个明显的不同是需要使用回调函数而不能像dialogs其他函数一样同步地返回结果;但也可以通过threads模块的方法来实现。例如显示一个输入框并获取输入结果为:
+var input = threads.disposable();
+dialogas.build({
+ title: "请输入您的年龄",
+ inputPrefill: "18"
+}).on("input", text => {
+ input.setAndNotify(text);
+}).show();
+var age = parseInt(input.blockedGet());
+tosatLog(age);
+dialogs.build()返回的对话框对象,内置一些事件用于响应用户的交互,也可以获取对话框的状态和信息。
show#dialog <Dialog> 对话框对话框显示时会触发的事件。例如:
+dialogs.build({
+ title: "标题"
+}).on("show", (dialog)=>{
+ toast("对话框显示了");
+}).show();
+cancel#dialog <Dialog> 对话框对话框被取消时会触发的事件。一个对话框可能按取消按钮、返回键取消或者点击对话框以外区域取消。例如:
+dialogs.build({
+ title: "标题",
+ positive: "确定",
+ negative: "取消"
+}).on("cancel", (dialog)=>{
+ toast("对话框取消了");
+}).show();
+dismiss#dialog <Dialog> 对话框对话框消失时会触发的事件。对话框被取消或者手动调用dialog.dismiss()函数都会触发该事件。例如:
var d = dialogs.build({
+ title: "标题",
+ positive: "确定",
+ negative: "取消"
+}).on("dismiss", (dialog)=>{
+ toast("对话框消失了");
+}).show();
+
+setTimeout(()=>{
+ d.dismiss();
+}, 5000);
+positive#dialog <Dialog> 对话框确定按钮按下时触发的事件。例如:
+var d = dialogs.build({
+ title: "标题",
+ positive: "确定",
+ negative: "取消"
+}).on("positive", (dialog)=>{
+ toast("你点击了确定");
+}).show();
+negative#dialog <Dialog> 对话框取消按钮按下时触发的事件。例如:
+var d = dialogs.build({
+ title: "标题",
+ positive: "确定",
+ negative: "取消"
+}).on("negative", (dialog)=>{
+ toast("你点击了取消");
+}).show();
+neutral#dialog <Dialog> 对话框中性按钮按下时触发的事件。例如:
+var d = dialogs.build({
+ title: "标题",
+ positive: "确定",
+ negative: "取消",
+ neutral: "稍后提示"
+}).on("positive", (dialog)=>{
+ toast("你点击了稍后提示");
+}).show();
+any#dialog <Dialog> 对话框action <string> 被点击的按钮,可能的值为:positive 确定按钮 negative 取消按钮neutral 中性按钮任意按钮按下时触发的事件。例如:
+var d = dialogs.build({
+ title: "标题",
+ positive: "确定",
+ negative: "取消",
+ neutral: "稍后提示"
+}).on("any", (action, dialog)=>{
+ if(action == "positive"){
+ toast("你点击了确定");
+ }else if(action == "negative"){
+ toast("你点击了取消");
+ }
+}).show();
+item_select#对话框列表(itemsSelectMode为"select")的项目被点击选中时触发的事件。例如:
+var d = dialogs.build({
+ title: "请选择",
+ positive: "确定",
+ negative: "取消",
+ items: ["A", "B", "C", "D"],
+ itemsSelectMode: "select"
+}).on("item_select", (index, item, dialog)=>{
+ toast("您选择的是第" + (index + 1) + "项, 选项为" + item);
+}).show();
+single_choice#对话框单选列表(itemsSelectMode为"singleChoice")的项目被选中并点击确定时触发的事件。例如:
+var d = dialogs.build({
+ title: "请选择",
+ positive: "确定",
+ negative: "取消",
+ items: ["A", "B", "C", "D"],
+ itemsSelectMode: "singleChoice"
+}).on("item_select", (index, item, dialog)=>{
+ toast("您选择的是第" + (index + 1) + "项, 选项为" + item);
+}).show();
+multi_choice#对话框多选列表(itemsSelectMode为"multiChoice")的项目被选中并点击确定时触发的事件。例如:
+var d = dialogs.build({
+ title: "请选择",
+ positive: "确定",
+ negative: "取消",
+ items: ["A", "B", "C", "D"],
+ itemsSelectMode: "multiChoice"
+}).on("item_select", (indices, items, dialog)=>{
+ toast(util.format("您选择的项目为%o, 选项为%o", indices, items);
+}).show();
+input#text <string> 输入框的内容dialog <Dialog> 对话框带有输入框的对话框当点击确定时会触发的事件。例如:
+dialogs.build({
+ title: "请输入",
+ positive: "确定",
+ negative: "取消",
+ inputPrefill: ""
+}).on("input", (text, dialog)=>{
+ toast("你输入的是" + text);
+}).show();
+input_change#text <string> 输入框的内容dialog <Dialog> 对话框对话框的输入框的文本发生变化时会触发的事件。例如:
+dialogs.build({
+ title: "请输入",
+ positive: "确定",
+ negative: "取消",
+ inputPrefill: ""
+}).on("input_change", (text, dialog)=>{
+ toast("你输入的是" + text);
+}).show();
+
diff --git a/app/src/main/assets/docs/floaty.html b/app/src/main/assets/docs/floaty.html
index ad58b322..c68ae3a6 100644
--- a/app/src/main/assets/docs/floaty.html
+++ b/app/src/main/assets/docs/floaty.html
@@ -76,19 +76,32 @@
layout <xml> | <View> 悬浮窗界面的XML或者View指定悬浮窗的布局,创建并显示一个悬浮窗,返回一个FloatyWindow对象。
该悬浮窗自带关闭、调整大小、调整位置按键,可根据需要调用setAdjustEnabled()函数来显示或隐藏。
其中layout参数可以是xml布局或者一个View,更多信息参见ui模块的说明。
例子:
var w = floaty.window(
@@ -120,40 +134,116 @@ setTimeout(()=>{
ui.run(function(){
w.text.setText("文本");
});
-
floaty.closeAll()#
+有关返回的FloatyWindow对象的说明,参见下面的FloatyWindow章节。
layout <xml> | <View> 悬浮窗界面的XML或者View指定悬浮窗的布局,创建并显示一个原始悬浮窗,返回一个FloatyRawWindow对象。
与floaty.window()函数不同的是,该悬浮窗不会增加任何额外设施(例如调整大小、位置按钮),您可以根据自己需要编写任何布局。
而且,该悬浮窗支持完全全屏,可以覆盖状态栏,因此可以做护眼模式之类的应用。
+var w = floaty.rawWindow(
+ <frame gravity="center">
+ <text id="text">悬浮文字</text>
+ </frame>
+);
+
+w.setPosition(500, 500);
+
+setTimeout(()=>{
+ w.close();
+}, 2000);
+这段代码运行后将会在屏幕上显示悬浮文字,并在两秒后消失。
+有关返回的FloatyRawWindow对象的说明,参见下面的FloatyRawWindow章节。
关闭所有本脚本的悬浮窗。
悬浮窗对象,可通过FloatyWindow.{id}获取悬浮窗界面上的元素。例如, 悬浮窗window上一个控件的id为aaa, 那么window.aaa即可获取到该控件,类似于ui。
enabled <boolean> 是否启用悬浮窗调整(大小、位置)如果enabled为true,则在悬浮窗左上角、右上角显示可供位置、大小调整的标示,就像控制台一样; 如果enabled为false,则隐藏上述标示。
-设置悬浮窗位置。
-返回悬浮窗位置的X坐标。
-返回悬浮窗位置的Y坐标。
-设置悬浮窗宽高。
-返回悬浮窗宽度。
-返回悬浮窗高度。
-关闭悬浮窗。如果悬浮窗已经是关闭状态,则此函数将不执行任何操作。
被关闭后的悬浮窗不能再显示。
-使悬浮窗被关闭时自动结束脚本运行。
+原始悬浮窗对象,可通过window.{id}获取悬浮窗界面上的元素。例如, 悬浮窗window上一个控件的id为aaa, 那么window.aaa即可获取到该控件,类似于ui。
touchable <Boolean> 是否可触摸设置悬浮窗是否可触摸,如果为true, 则悬浮窗将接收到触摸、点击等事件并且无法继续传递到悬浮窗下面;如果为false, 悬浮窗上的触摸、点击等事件将被直接传递到悬浮窗下面。处于安全考虑,被悬浮窗接收的触摸事情无法再继续传递到下层。
+可以用此特性来制作护眼模式脚本。
+var w = floaty.rawWindow(
+ <frame gravity="center" bg="#44ffcc00"/>
+);
+
+w.setSize(-1, -1);
+w.setTouchable(false);
+
+setTimeout(()=>{
+ w.close();
+}, 4000);
+设置悬浮窗位置。
+返回悬浮窗位置的X坐标。
+返回悬浮窗位置的Y坐标。
+设置悬浮窗宽高。
+特别地,如果设置为-1,则为占满全屏;设置为-2则为根据悬浮窗内容大小而定。例如:
+var w = floaty.rawWindow(
+ <frame gravity="center" bg="#77ff0000">
+ <text id="text">悬浮文字</text>
+ </frame>
+);
+
+w.setSize(-1, -1);
+
+setTimeout(()=>{
+ w.close();
+}, 2000);
+返回悬浮窗宽度。
+返回悬浮窗高度。
+关闭悬浮窗。如果悬浮窗已经是关闭状态,则此函数将不执行任何操作。
+被关闭后的悬浮窗不能再显示。
+使悬浮窗被关闭时自动结束脚本运行。
diff --git a/app/src/main/assets/docs/globals.html b/app/src/main/assets/docs/globals.html index b160bd5f..4d60caa3 100644 --- a/app/src/main/assets/docs/globals.html +++ b/app/src/main/assets/docs/globals.html @@ -89,6 +89,7 @@调用该函数时会判断运行脚本的Auto.js的版本号,如果没有达到要求则抛出异常。
version参数可以是整数表示版本号,例如requiresAutojsVersion(250);也可以是字符串格式表示的版本,例如"3.0.0 Beta", "3.1.0 Alpha4", "3.2.0"等。
可以通过app.autojs.versionCode和app.autojs.versionName获取当前的Auto.js版本号和版本。
permissions <Array> 权限的字符串数组动态申请安卓的权限。例如:
+//请求GPS权限
+runtime.requestPermission(["access_fine_location"]);
+尽管安卓有很多权限,但必须写入Manifest才能动态申请,为了防止权限的滥用,目前Auto.js只能额外申请两个权限:
+access_fine_location GPS权限record_audio 录音权限您可以通过APK编辑器来增加Auto.js以及Auto.js打包的应用的权限。
+安卓所有的权限列表参见Permissions Overview。(并没有用)
全局变量。一个android.content.Context对象。
注意该对象为ApplicationContext,因此不能用于界面、对话框等的创建。
diff --git a/app/src/main/assets/docs/images.html b/app/src/main/assets/docs/images.html index 1187a09f..9e009677 100644 --- a/app/src/main/assets/docs/images.html +++ b/app/src/main/assets/docs/images.html @@ -87,11 +87,24 @@返回两个颜色是否相等。*注意该函数会忽略Alpha通道的值进行比较。
log(colors.equals("#112233", "#112234"));
log(colors.equals(0xFF112233, 0xFF223344));
-黑色,颜色值 #FF000000
+深灰色,颜色值 #FF444444
+灰色,颜色值 #FF888888
+亮灰色,颜色值 #FFCCCCCC
+白色,颜色值 #FFFFFFFF
+红色,颜色值 #FFFF0000
+绿色,颜色值 #FF00FF00
+蓝色,颜色值 #FF0000FF
+黄色,颜色值 #FFFFFF00
+青色,颜色值 #FF00FFFF
+品红色,颜色值 #FFFF00FF
+透明,颜色值 #00000000
+images模块提供了一些手机设备中常见的图片处理函数,包括截图、读写图片、图片剪裁、找色、找图等。
返回图片image在点(x, y)处的像素的ARGB值。
该值的格式为0xAARRGGBB,是一个"32位整数"(虽然JavaScript中并不区分整数类型和其他数值类型)。
坐标系以图片左上角为原点。以图片左侧边为y轴,上侧边为x轴。
+img <Image> 图片复制一张图片并返回新的副本。该函数会完全复制img对象的数据。
image <image> 图片image <Image> 图片path <string> 路径format <string> 图片格式,可选的值为:png