跳至主要內容

api文档

约 1107 字大约 4 分钟老猫

本节介绍$ui对象的 API 文档,这些函数绝大部分需要在"ui";模式下才能调用。

$ui.layout(xml)

  • xml {XML} | {string} 布局 XML 或者 XML 字符串

将布局 XML 渲染为视图(View)对象, 并设置为当前视图。

$ui.layoutFile(xmlFile)

  • xml {string} 布局 XML 文件的路径

此函数和ui.layout相似,只不过允许传入一个 xml 文件路径来渲染布局。

$ui.inflate(xml[, parent = null, attachToParent = false])

  • xml {string} | {XML} 布局 XML 或者 XML 字符串
  • parent {View} 父视图
  • attachToParent {boolean} 是否渲染的 View 加到父视图中,默认为 false
  • 返回 {View}

将布局 XML 渲染为视图(View)对象。如果该 View 将作为某个 View 的子 View,我们建议传入parent参数,这样在渲染时依赖于父视图的一些布局属性能够正确应用。

此函数用于动态创建、显示 View。

"ui";

$ui.layout(<linear id="container"></linear>);

// 动态创建3个文本控件,并加到container容器中
// 这里仅为实例,实际上并不推荐这种做法,如果要展示列表,
// 使用list组件;动态创建十几个、几十个View会让界面卡顿
for (let i = 0; i < 3; i++) {
  let textView = $ui.inflate(
    <text textColor="#000000" textSize="14sp" />,
    $ui.container
  );
  textView.attr("text", "文本控件" + i);
  $ui.container.addView(textView);
}

$ui.registerWidget(name, widget)

  • name {string} 组件名称
  • widget {Function} 组件

注册一个自定义组件。参考示例->界面控件->自定义控件。

$ui.isUiThread()

  • 返回 {boolean}

返回当前线程是否是 UI 线程。

"ui";

log($ui.isUiThread()); // => true

$threads.start(function () {
  log($ui.isUiThread()); // => false
});

$ui.findView(id)

  • id {string} View 的 ID
  • 返回 {View}

在当前视图中根据 ID 查找相应的视图对象并返回。如果当前未设置视图或找不到此 ID 的视图时返回null

一般我们都是通过ui.xxx来获取 id 为 xxx 的控件,如果 xxx 是一个 ui 已经有的属性,就可以通过$ui.findView()来获取这个控件。

$ui.finish()

结束当前活动并销毁界面。

$ui.setContentView(view)

  • view {View}

将视图对象设置为当前视图。

$ui.post(callback[, delay = 0])

  • callback {Function} 回调函数
  • delay {number} 延迟,单位毫秒

callback加到 UI 线程的消息循环中,并延迟 delay 毫秒后执行(不能准确保证一定在 delay 毫秒后执行)。

此函数可以用于 UI 线程中延时执行动作(sleep 不能在 UI 线程中使用),也可以用于子线程中更新 UI。

"ui";

ui.layout(
    <frame>
        <text id="result"/>
    </frame>
);

ui.result.attr("text", "计算中");
// 在子线程中计算1+ ... + 10000000
threads.start({
    let sum = 0;
    for (let i = 0; i < 1000000; i++) {
        sum += i;
    }
    // 由于不能在子线程操作UI,所以要抛到UI线程执行
    ui.post(() => {
        ui.result.attr("text", String(sum));
    });
});

$ui.run(callback)

  • callback {Function} 回调函数
  • 返回 {any} callback 的执行结果

callback在 UI 线程中执行。如果当前已经在 UI 线程中,则直接执行callback;否则将callback抛到 UI 线程中执行(加到 UI 线程的消息循环的末尾),并等待 callback 执行结束(阻塞当前线程)

$ui.statusBarColor(color)

  • color {string | number} 颜色

设置当前界面的状态栏颜色。

"ui";
ui.statusBarColor("#000000");

$ui.useAndroidResources()

启用使用 Android 的布局(layout)、绘图(drawable)、动画(anim)、样式(style)等资源的特性。启用该特性后,在 project.json 中进行以下配置,就可以像写 Android 原生一样写界面:

{
  // ...
  "androidResources": {
    "resDir": "res", // 资源文件夹
    "manifest": "AndroidManifest.xml" // AndroidManifest文件路径
  }
}

res 文件夹通常为以下结构:

-res -
  layout - // 布局资源
  drawable - // 图片、形状等资源
  menu - // 菜单资源
  values; // 样式、字符串等资源
// ...

可参考示例->复杂界面->Android 原生界面。

$ui.imageCache.clearDiskCache()

[Pro 8.8.16 新增open in new window]

清除 UI 的图片文件缓存,通常是清除使用 url 下载的图片缓存。(比如 img 控件的 url 链接加载的图片)

此函数也可用于清除自定义启动图中的图片控件的文件缓存。

此函数和找图找色无关,并不会清除图色相关的图片内存、缓存。

此函数需要若在 UI 线程执行,会自动切换到 IO 线程异步执行,因此在 UI 线程执行时,函数返回不代表文件缓存已全部清理完毕。

$ui.imageCache.clearMemory()

[Pro 8.8.16 新增open in new window]

清除 UI 的图片内存缓存。

此函数和找图找色无关,并不会清除图色相关的图片内存、缓存。