diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 09d75975d..f3393090e 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 d7af1f9ac..7612b414f 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 cd139783c..ff284e873 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 @@layout
<xml> | <View> 悬浮窗界面的XML或者View指定悬浮窗的布局,创建并显示一个悬浮窗,返回一个FloatyWindow
对象。
该悬浮窗自带关闭、调整大小、调整位置按键,可根据需要调用setAdjustEnabled()
函数来显示或隐藏。
其中layout参数可以是xml布局或者一个View,更多信息参见ui模块的说明。
例子:
var w = floaty.window(
@@ -2419,40 +2762,116 @@ Floaty#
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 @@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 @@
黑色,颜色值 #FF000000
+深灰色,颜色值 #FF444444
+灰色,颜色值 #FF888888
+亮灰色,颜色值 #FFCCCCCC
+白色,颜色值 #FFFFFFFF
+红色,颜色值 #FFFF0000
+绿色,颜色值 #FF00FF00
+蓝色,颜色值 #FF0000FF
+黄色,颜色值 #FFFFFF00
+青色,颜色值 #FF00FFFF
+品红色,颜色值 #FFFF00FF
+透明,颜色值 #00000000
+images模块提供了一些手机设备中常见的图片处理函数,包括截图、读写图片、图片剪裁、找色、找图等。
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 ad58b322d..c68ae3a6a 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 @@ Floaty#
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 b160bd5f7..4d60caa33 100644 --- a/app/src/main/assets/docs/globals.html +++ b/app/src/main/assets/docs/globals.html @@ -89,6 +89,7 @@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 1187a09f1..9e009677e 100644 --- a/app/src/main/assets/docs/images.html +++ b/app/src/main/assets/docs/images.html @@ -87,11 +87,24 @@黑色,颜色值 #FF000000
+深灰色,颜色值 #FF444444
+灰色,颜色值 #FF888888
+亮灰色,颜色值 #FFCCCCCC
+白色,颜色值 #FFFFFFFF
+红色,颜色值 #FFFF0000
+绿色,颜色值 #FF00FF00
+蓝色,颜色值 #FF0000FF
+黄色,颜色值 #FFFFFF00
+青色,颜色值 #FF00FFFF
+品红色,颜色值 #FFFF00FF
+透明,颜色值 #00000000
+images模块提供了一些手机设备中常见的图片处理函数,包括截图、读写图片、图片剪裁、找色、找图等。
img
<Image> 图片复制一张图片并返回新的副本。该函数会完全复制img对象的数据。
image
<image> 图片image
<Image> 图片path
<string> 路径format
<string> 图片格式,可选的值为:png