Page.md

June 29, 2020 · View on GitHub

Page 节点

  • 指定一个配置文件 [config] 或网页 [html] 作为一个子页面入口
<?xml version="1.0" encoding="UTF-8" ?>
<page>
    <page title="原生专属"
        desc="越接近AOSP越适用的选项"
        config="file:///android_asset/config_xml/for_aosp.xml" />
    <page title="Flyme专属"
        desc="用于Meizu Flyme系统的选项"
        html="https://www.lanzous.com/b838135" />
</page>
  • 公共属性(大部分与功能节点共有)
属性作用有效值示例
id如果允许长按添加到桌面快捷,必需设置ID在同一配置文件中不重复的ida0001
desc描述文本内容显示在标题下的小字,可以不设置
desc-sh动态设置desc内容的脚本脚本代码echo '自定义的说明信息'
summary高亮显示的摘要信息文本内容这是摘要
summary-sh动态设置summary内容的脚本脚本代码echo '自定义的摘要信息'
visible自定义脚本,输出1或0,决定该功能项是否显示脚本代码echo '1'
logo作为快捷方式添加到桌面时使用的图标文件路径
icon显示在功能左侧的图标。如果未设置logo属性,它也同时会被作为logo使用文件路径

logoicon除了支持assets文件路径,也支持磁盘文件路径

  • 特有属性
属性名称用途
config配置指定另一个配置文件作为子页面的内容
html网页指定一个网页作为子页面的内容
activity活动名称点击后要打开的activity,格式为actionpackageName/activityClass
link链接地址点击后要打卡的网页地址(将调用浏览器)
config-sh动态配置写一段脚本,输出配置文件所在路径或完整内容
before-load读取配置前指定在加载配置文件前要执行的代码(仅限使用config、config-sh的page定义有效)
after-load读取配置后指定配置文件读取完成后要执行的代码(仅限使用config、config-sh的page定义有效)
  • 注意: config只能指定应用assets下的文件,其中file:///android_asset/是固定前缀,可以省略不写,就像这样:
<page title="标题文本"
    desc="描述文本"
    config="config_xml/for_aosp.xml" />
  • config-sh 属性需设置为一段脚本,通过echo输出配置文件所在位置,或直接输出配置文件完整内容
<!--输出配置文件绝对路径。支持以 “file:///android_asset” 开头指定assets中的文件-->
<page after-read="sleep 1" before-read="sleep 1"
    config-sh="echo 'file:///android_asset/kr-script/pages/custom_kernel_tuner.xml'">
    <title>测试config-sh【assets路径输出】</title>
    <desc>通过config-sh输出配置页所在位置,它可以是在assets中的文件</desc>
</page>

<!--输出配置文件绝对路径-->
<page config-sh="echo '/sdcard/text_test.xml'">
    <title>测试config-sh【路径输出】</title>
    <desc>通过config-sh输出配置页所在位置</desc>
</page>

<!--输出配置文件内容(框架识别到输出内容以“<?xml”开头 且以“>”结尾,按照此模式解析)-->
<page config-sh="cat /sdcard/text_test.xml">
    <title>测试config-sh【全文输出】</title>
    <desc>通过config-sh输出配置页内容</desc>
</page>
  • activity 示例
<!--格式之一:activity=[action] -->
<page activity="com.android.settings.APPLICATION_DEVELOPMENT_SETTINGS">
    <title>开发者选项</title>
</page>

<!--格式之二:activity=[packageName/activityClass] -->
<page activity="com.android.settings/.Settings$MemorySettingsActivity">
    <title>内存使用情况</title>
</slice>

页面的菜单

  • 你可以为子页面定制右上角菜单、悬浮按钮
  • 并单独设置一个脚本handler来处理菜单和按钮点击事件
  • 为了区别多个菜单按钮,你可以为menu指定id
  • 例如:
<page config="samples/configs/empty.xml">
    <title>在页面右上角显示菜单</title>
    <menu type="default" id="AAA">自定义 2</menu>
    <menu type="file" id="BBB" style="fab">选择文件</menu>
    <menu type="refresh">刷新界面</menu>
    <menu type="finish">关闭页面</menu>
    <menu type="file">选择文件</menu>
    <handler>
        echo '点击的菜单项' $menu_id
        echo '选择的文件' $file
    </handler>
</page>

PIO做了一些语法兼容,所以下面几种写法都可以识别且没有区别

<menu>菜单选项</menu>
<menu-item>菜单选项</menu-item>
<option>菜单选项</option>
<page-option>菜单选项</page-option>
属性作用有效值示例
auto-off、auto-close执行完handler代码以后关闭日志输出true falsetrue
auto-finish执行完handler代码以后关闭当前页面true falsetrue
reload-page执行完handler代码以后刷新当前页面true falsetrue
interruptible是否可中断handler执行true falsetrue
id用于区别多个menu的标识任意不重复的idA001
type用于区别多个menu的标识详见下方说明default
style菜单显示方式,设为fab时将显示未悬浮按钮default fabfab
icon悬浮按钮的图标文件路径文件路径samples/icons/icon-test.png
  • 注意:目前的版本,同一个Page只能设置一个style=fab的菜单按钮!
取值作用
default默认的按钮类型,点击后将menu的id传给handler处理
refresh、reload点击后刷新当前子页面,不会执行handler
exit、finish、close点击后关闭当前子页面,不会执行handler
file点击后需要用户选取文件,再将文件路径和menu的id传给handler

handler 处理菜单点击事件

PIO做了一些语法兼容,所以下面几种写法都可以识别且没有区别

<handler>echo $menu_id</handler>

<!--你可以和picker、switch一样统一使用set节点来写处理脚本
并且可以直接使用state变量-->
<set>echo $state</set>

<script>echo $menu_id</script>
  • handler会收到 menu_idstatefile(其中menu_idstate是相同的)
  • 例如:
<handler>
    echo '点击的菜单项' $menu_id
    echo '选择的文件' $file
</handler>

补充说明

  • 为与action、switch定义语法保持一致,title、desc也可以作为page下的节点定义
<page config="file:///android_asset/config_xml/for_miui.xml">
  <title>MIUI专属</title>
  <desc>用于Xiaomi MIUI的选项</desc>
</page>