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 @@
  • dialogs.select(title, items, callback)
  • dialogs.singleChoice(title, items[, index, callback])
  • dialogs.multiChoice(title, items[, indices, callback])
  • +
  • dialogs.build(properties)
  • + + +
  • Dialog
  • Engines
  • +
  • colors.BLACK
  • +
  • colors.DKGRAY
  • +
  • colors.GRAY
  • +
  • colors.LTGRAY
  • +
  • colors.WHITE
  • +
  • colors.RED
  • +
  • colors.GREEN
  • +
  • colors.BLUE
  • +
  • colors.YELLOW
  • +
  • colors.CYAN
  • +
  • colors.MAGENTA
  • +
  • colors.TRANSPARENT
  • Images

    显示一个多选列表对话框,等待用户选择,返回用户选择的选项索引的数组。如果用户取消了选择,返回[]

    -

    在ui模式下该函数返回一个Promise。 -

    +

    在ui模式下该函数返回一个Promise

    +

    dialogs.build(properties)#

    +
    +

    创建一个可自定义的对话框,例如:

    +
    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可供配置的项目为:

    + +

    通过这些选项可以自定义一个对话框,并通过监听返回的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);
    +

    Dialog#

    +

    dialogs.build()返回的对话框对象,内置一些事件用于响应用户的交互,也可以获取对话框的状态和信息。

    +

    事件: show#

    +
    +

    对话框显示时会触发的事件。例如:

    +
    dialogs.build({
    +    title: "标题"
    +}).on("show", (dialog)=>{
    +    toast("对话框显示了");
    +}).show();
    +

    事件: cancel#

    +
    +

    对话框被取消时会触发的事件。一个对话框可能按取消按钮、返回键取消或者点击对话框以外区域取消。例如:

    +
    dialogs.build({
    +    title: "标题",
    +    positive: "确定",
    +    negative: "取消"
    +}).on("cancel", (dialog)=>{
    +    toast("对话框取消了");
    +}).show();
    +

    事件: dismiss#

    +
    +

    对话框消失时会触发的事件。对话框被取消或者手动调用dialog.dismiss()函数都会触发该事件。例如:

    +
    var d = dialogs.build({
    +    title: "标题",
    +    positive: "确定",
    +    negative: "取消"
    +}).on("dismiss", (dialog)=>{
    +    toast("对话框消失了");
    +}).show();
    +
    +setTimeout(()=>{
    +    d.dismiss();
    +}, 5000);
    +

    事件: positive#

    +
    +

    确定按钮按下时触发的事件。例如:

    +
    var d = dialogs.build({
    +    title: "标题",
    +    positive: "确定",
    +    negative: "取消"
    +}).on("positive", (dialog)=>{
    +    toast("你点击了确定");
    +}).show();
    +

    事件: negative#

    +
    +

    取消按钮按下时触发的事件。例如:

    +
    var d = dialogs.build({
    +    title: "标题",
    +    positive: "确定",
    +    negative: "取消"
    +}).on("negative", (dialog)=>{
    +    toast("你点击了取消");
    +}).show();
    +

    事件: neutral#

    +
    +

    中性按钮按下时触发的事件。例如:

    +
    var d = dialogs.build({
    +    title: "标题",
    +    positive: "确定",
    +    negative: "取消",
    +    neutral: "稍后提示"
    +}).on("positive", (dialog)=>{
    +    toast("你点击了稍后提示");
    +}).show();
    +

    事件: any#

    +
    +

    任意按钮按下时触发的事件。例如:

    +
    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#

    +
    +

    带有输入框的对话框当点击确定时会触发的事件。例如:

    +
    dialogs.build({
    +    title: "请输入",
    +    positive: "确定",
    +    negative: "取消",
    +    inputPrefill: ""
    +}).on("input", (text, dialog)=>{
    +    toast("你输入的是" + text);
    +}).show();
    +

    事件: input_change#

    +
    +

    对话框的输入框的文本发生变化时会触发的事件。例如:

    +
    dialogs.build({
    +    title: "请输入",
    +    positive: "确定",
    +    negative: "取消",
    +    inputPrefill: ""
    +}).on("input_change", (text, dialog)=>{
    +    toast("你输入的是" + text);
    +}).show();
    +

    Engines#

    Stability: 2 - Stable

    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章节。

    +

    floaty.rawWindow(layout)#

    +
    +

    指定悬浮窗的布局,创建并显示一个原始悬浮窗,返回一个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章节。

    +

    floaty.closeAll()#

    关闭所有本脚本的悬浮窗。

    FloatyWindow#

    悬浮窗对象,可通过FloatyWindow.{id}获取悬浮窗界面上的元素。例如, 悬浮窗window上一个控件的id为aaa, 那么window.aaa即可获取到该控件,类似于ui。

    -

    FloatyWindow.setAdjustEnabled(enabled)#

    +

    window.setAdjustEnabled(enabled)#

    如果enabled为true,则在悬浮窗左上角、右上角显示可供位置、大小调整的标示,就像控制台一样; 如果enabled为false,则隐藏上述标示。

    -

    FloatyWindow.setPosition(x, y)#

    +

    window.setPosition(x, y)#

    设置悬浮窗位置。

    -

    FloatyWindow.getX()#

    +

    window.getX()#

    返回悬浮窗位置的X坐标。

    -

    FloatyWindow.getY()#

    +

    window.getY()#

    返回悬浮窗位置的Y坐标。

    -

    FloatyWindow.setSize(width, height)#

    +

    window.setSize(width, height)#

    设置悬浮窗宽高。

    -

    FloatyWindow.getWidht()#

    +

    window.getWidht()#

    返回悬浮窗宽度。

    -

    FloatyWindow.getHeight()#

    +

    window.getHeight()#

    返回悬浮窗高度。

    -

    FloatyWindow.close()#

    +

    window.close()#

    关闭悬浮窗。如果悬浮窗已经是关闭状态,则此函数将不执行任何操作。

    被关闭后的悬浮窗不能再显示。

    -

    FloatyWindow.exitOnClose()#

    +

    window.exitOnClose()#

    +

    使悬浮窗被关闭时自动结束脚本运行。

    +

    FloatyRawWindow#

    +

    原始悬浮窗对象,可通过window.{id}获取悬浮窗界面上的元素。例如, 悬浮窗window上一个控件的id为aaa, 那么window.aaa即可获取到该控件,类似于ui。

    +

    window.setTouchable(touchable)#

    +
    +

    设置悬浮窗是否可触摸,如果为true, 则悬浮窗将接收到触摸、点击等事件并且无法继续传递到悬浮窗下面;如果为false, 悬浮窗上的触摸、点击等事件将被直接传递到悬浮窗下面。处于安全考虑,被悬浮窗接收的触摸事情无法再继续传递到下层。

    +

    可以用此特性来制作护眼模式脚本。

    +
    var w = floaty.rawWindow(
    +    <frame gravity="center" bg="#44ffcc00"/>
    +);
    +
    +w.setSize(-1, -1);
    +w.setTouchable(false);
    +
    +setTimeout(()=>{
    +    w.close();
    +}, 4000);
    +

    window.setPosition(x, y)#

    +
    +

    设置悬浮窗位置。

    +

    window.getX()#

    +

    返回悬浮窗位置的X坐标。

    +

    window.getY()#

    +

    返回悬浮窗位置的Y坐标。

    +

    window.setSize(width, height)#

    +
    +

    设置悬浮窗宽高。

    +

    特别地,如果设置为-1,则为占满全屏;设置为-2则为根据悬浮窗内容大小而定。例如:

    +
    var w = floaty.rawWindow(
    +    <frame gravity="center" bg="#77ff0000">
    +        <text id="text">悬浮文字</text>
    +    </frame>
    +);
    +
    +w.setSize(-1, -1);
    +
    +setTimeout(()=>{
    +    w.close();
    +}, 2000);
    +

    window.getWidht()#

    +

    返回悬浮窗宽度。

    +

    window.getHeight()#

    +

    返回悬浮窗高度。

    +

    window.close()#

    +

    关闭悬浮窗。如果悬浮窗已经是关闭状态,则此函数将不执行任何操作。

    +

    被关闭后的悬浮窗不能再显示。

    +

    window.exitOnClose()#

    使悬浮窗被关闭时自动结束脚本运行。

    @@ -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.versionCodeapp.autojs.versionName获取当前的Auto.js版本号和版本。

    +

    runtime.requestPermissions(permissions)#

    +
    +

    动态申请安卓的权限。例如:

    +
    //请求GPS权限
    +runtime.requestPermission(["access_fine_location"]);
    +

    尽管安卓有很多权限,但必须写入Manifest才能动态申请,为了防止权限的滥用,目前Auto.js只能额外申请两个权限:

    + +

    您可以通过APK编辑器来增加Auto.js以及Auto.js打包的应用的权限。

    +

    安卓所有的权限列表参见Permissions Overview。(并没有用)

    context#

    全局变量。一个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));
    -

    Images#

    +

    colors.BLACK#

    +

    黑色,颜色值 #FF000000

    +

    colors.DKGRAY#

    +

    深灰色,颜色值 #FF444444

    +

    colors.GRAY#

    +

    灰色,颜色值 #FF888888

    +

    colors.LTGRAY#

    +

    亮灰色,颜色值 #FFCCCCCC

    +

    colors.WHITE#

    +

    白色,颜色值 #FFFFFFFF

    +

    colors.RED#

    +

    红色,颜色值 #FFFF0000

    +

    colors.GREEN#

    +

    绿色,颜色值 #FF00FF00

    +

    colors.BLUE#

    +

    蓝色,颜色值 #FF0000FF

    +

    colors.YELLOW#

    +

    黄色,颜色值 #FFFFFF00

    +

    colors.CYAN#

    +

    青色,颜色值 #FF00FFFF

    +

    colors.MAGENTA#

    +

    品红色,颜色值 #FFFF00FF

    +

    colors.TRANSPARENT#

    +

    透明,颜色值 #00000000

    +

    Images#

    Stability: 2 - Stable

    images模块提供了一些手机设备中常见的图片处理函数,包括截图、读写图片、图片剪裁、找色、找图等。

    images.requestScreenCapture([landscape])#

    返回图片image在点(x, y)处的像素的ARGB值。

    该值的格式为0xAARRGGBB,是一个"32位整数"(虽然JavaScript中并不区分整数类型和其他数值类型)。

    坐标系以图片左上角为原点。以图片左侧边为y轴,上侧边为x轴。

    +

    images.copy(img)#

    +
    +

    复制一张图片并返回新的副本。该函数会完全复制img对象的数据。

    images.save(image, path[, format = "png", quality = 100])#

    diff --git a/app/src/main/assets/docs/dialogs.html b/app/src/main/assets/docs/dialogs.html index ced93586..29ae1be5 100644 --- a/app/src/main/assets/docs/dialogs.html +++ b/app/src/main/assets/docs/dialogs.html @@ -83,6 +83,22 @@
  • dialogs.select(title, items, callback)
  • dialogs.singleChoice(title, items[, index, callback])
  • dialogs.multiChoice(title, items[, indices, callback])
  • +
  • dialogs.build(properties)
  • + + +
  • Dialog
  • @@ -213,7 +229,306 @@ dialogs.select("请选择一个选项", ["选项A", "

    显示一个多选列表对话框,等待用户选择,返回用户选择的选项索引的数组。如果用户取消了选择,返回[]

    在ui模式下该函数返回一个Promise

    +

    dialogs.build(properties)#

    +
    +

    创建一个可自定义的对话框,例如:

    +
    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可供配置的项目为:

    + +

    通过这些选项可以自定义一个对话框,并通过监听返回的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);
    +

    Dialog#

    +

    dialogs.build()返回的对话框对象,内置一些事件用于响应用户的交互,也可以获取对话框的状态和信息。

    +

    事件: show#

    +
    +

    对话框显示时会触发的事件。例如:

    +
    dialogs.build({
    +    title: "标题"
    +}).on("show", (dialog)=>{
    +    toast("对话框显示了");
    +}).show();
    +

    事件: cancel#

    +
    +

    对话框被取消时会触发的事件。一个对话框可能按取消按钮、返回键取消或者点击对话框以外区域取消。例如:

    +
    dialogs.build({
    +    title: "标题",
    +    positive: "确定",
    +    negative: "取消"
    +}).on("cancel", (dialog)=>{
    +    toast("对话框取消了");
    +}).show();
    +

    事件: dismiss#

    +
    +

    对话框消失时会触发的事件。对话框被取消或者手动调用dialog.dismiss()函数都会触发该事件。例如:

    +
    var d = dialogs.build({
    +    title: "标题",
    +    positive: "确定",
    +    negative: "取消"
    +}).on("dismiss", (dialog)=>{
    +    toast("对话框消失了");
    +}).show();
    +
    +setTimeout(()=>{
    +    d.dismiss();
    +}, 5000);
    +

    事件: positive#

    +
    +

    确定按钮按下时触发的事件。例如:

    +
    var d = dialogs.build({
    +    title: "标题",
    +    positive: "确定",
    +    negative: "取消"
    +}).on("positive", (dialog)=>{
    +    toast("你点击了确定");
    +}).show();
    +

    事件: negative#

    +
    +

    取消按钮按下时触发的事件。例如:

    +
    var d = dialogs.build({
    +    title: "标题",
    +    positive: "确定",
    +    negative: "取消"
    +}).on("negative", (dialog)=>{
    +    toast("你点击了取消");
    +}).show();
    +

    事件: neutral#

    +
    +

    中性按钮按下时触发的事件。例如:

    +
    var d = dialogs.build({
    +    title: "标题",
    +    positive: "确定",
    +    negative: "取消",
    +    neutral: "稍后提示"
    +}).on("positive", (dialog)=>{
    +    toast("你点击了稍后提示");
    +}).show();
    +

    事件: any#

    +
    +

    任意按钮按下时触发的事件。例如:

    +
    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#

    +
    +

    带有输入框的对话框当点击确定时会触发的事件。例如:

    +
    dialogs.build({
    +    title: "请输入",
    +    positive: "确定",
    +    negative: "取消",
    +    inputPrefill: ""
    +}).on("input", (text, dialog)=>{
    +    toast("你输入的是" + text);
    +}).show();
    +

    事件: input_change#

    +
    +

    对话框的输入框的文本发生变化时会触发的事件。例如:

    +
    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 @@ @@ -105,6 +118,7 @@
  • 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章节。

    +

    floaty.rawWindow(layout)#

    +
    +

    指定悬浮窗的布局,创建并显示一个原始悬浮窗,返回一个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章节。

    +

    floaty.closeAll()#

    关闭所有本脚本的悬浮窗。

    FloatyWindow#

    悬浮窗对象,可通过FloatyWindow.{id}获取悬浮窗界面上的元素。例如, 悬浮窗window上一个控件的id为aaa, 那么window.aaa即可获取到该控件,类似于ui。

    -

    FloatyWindow.setAdjustEnabled(enabled)#

    +

    window.setAdjustEnabled(enabled)#

    如果enabled为true,则在悬浮窗左上角、右上角显示可供位置、大小调整的标示,就像控制台一样; 如果enabled为false,则隐藏上述标示。

    -

    FloatyWindow.setPosition(x, y)#

    +

    window.setPosition(x, y)#

    设置悬浮窗位置。

    -

    FloatyWindow.getX()#

    +

    window.getX()#

    返回悬浮窗位置的X坐标。

    -

    FloatyWindow.getY()#

    +

    window.getY()#

    返回悬浮窗位置的Y坐标。

    -

    FloatyWindow.setSize(width, height)#

    +

    window.setSize(width, height)#

    设置悬浮窗宽高。

    -

    FloatyWindow.getWidht()#

    +

    window.getWidht()#

    返回悬浮窗宽度。

    -

    FloatyWindow.getHeight()#

    +

    window.getHeight()#

    返回悬浮窗高度。

    -

    FloatyWindow.close()#

    +

    window.close()#

    关闭悬浮窗。如果悬浮窗已经是关闭状态,则此函数将不执行任何操作。

    被关闭后的悬浮窗不能再显示。

    -

    FloatyWindow.exitOnClose()#

    +

    window.exitOnClose()#

    +

    使悬浮窗被关闭时自动结束脚本运行。

    +

    FloatyRawWindow#

    +

    原始悬浮窗对象,可通过window.{id}获取悬浮窗界面上的元素。例如, 悬浮窗window上一个控件的id为aaa, 那么window.aaa即可获取到该控件,类似于ui。

    +

    window.setTouchable(touchable)#

    +
    +

    设置悬浮窗是否可触摸,如果为true, 则悬浮窗将接收到触摸、点击等事件并且无法继续传递到悬浮窗下面;如果为false, 悬浮窗上的触摸、点击等事件将被直接传递到悬浮窗下面。处于安全考虑,被悬浮窗接收的触摸事情无法再继续传递到下层。

    +

    可以用此特性来制作护眼模式脚本。

    +
    var w = floaty.rawWindow(
    +    <frame gravity="center" bg="#44ffcc00"/>
    +);
    +
    +w.setSize(-1, -1);
    +w.setTouchable(false);
    +
    +setTimeout(()=>{
    +    w.close();
    +}, 4000);
    +

    window.setPosition(x, y)#

    +
    +

    设置悬浮窗位置。

    +

    window.getX()#

    +

    返回悬浮窗位置的X坐标。

    +

    window.getY()#

    +

    返回悬浮窗位置的Y坐标。

    +

    window.setSize(width, height)#

    +
    +

    设置悬浮窗宽高。

    +

    特别地,如果设置为-1,则为占满全屏;设置为-2则为根据悬浮窗内容大小而定。例如:

    +
    var w = floaty.rawWindow(
    +    <frame gravity="center" bg="#77ff0000">
    +        <text id="text">悬浮文字</text>
    +    </frame>
    +);
    +
    +w.setSize(-1, -1);
    +
    +setTimeout(()=>{
    +    w.close();
    +}, 2000);
    +

    window.getWidht()#

    +

    返回悬浮窗宽度。

    +

    window.getHeight()#

    +

    返回悬浮窗高度。

    +

    window.close()#

    +

    关闭悬浮窗。如果悬浮窗已经是关闭状态,则此函数将不执行任何操作。

    +

    被关闭后的悬浮窗不能再显示。

    +

    window.exitOnClose()#

    使悬浮窗被关闭时自动结束脚本运行。

    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 @@
  • random()
  • requiresApi(api)
  • requiresAutojsVersion(version)
  • +
  • runtime.requestPermissions(permissions)
  • context
  • @@ -217,6 +218,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.versionCodeapp.autojs.versionName获取当前的Auto.js版本号和版本。

    +

    runtime.requestPermissions(permissions)#

    +
    +

    动态申请安卓的权限。例如:

    +
    //请求GPS权限
    +runtime.requestPermission(["access_fine_location"]);
    +

    尽管安卓有很多权限,但必须写入Manifest才能动态申请,为了防止权限的滥用,目前Auto.js只能额外申请两个权限:

    + +

    您可以通过APK编辑器来增加Auto.js以及Auto.js打包的应用的权限。

    +

    安卓所有的权限列表参见Permissions Overview。(并没有用)

    context#

    全局变量。一个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 @@
  • colors.equals(color1, color2)
  • +
  • colors.BLACK
  • +
  • colors.DKGRAY
  • +
  • colors.GRAY
  • +
  • colors.LTGRAY
  • +
  • colors.WHITE
  • +
  • colors.RED
  • +
  • colors.GREEN
  • +
  • colors.BLUE
  • +
  • colors.YELLOW
  • +
  • colors.CYAN
  • +
  • colors.MAGENTA
  • +
  • colors.TRANSPARENT
  • Images