Shield 中文文档 下载 App

luajava:Lua 调安卓接口的桥

桥的两面

Lua 世界与 Java 世界中间隔着一座桥:桥的这头是 import——绝大多数时候你用它就够了;桥的那头是 luajava——一套更底层、控制更细的函数。日常写界面脚本,import 的简写能覆盖九成场景。

写法一:import(九成的日常)

import "android.widget.Button"          -- 单个类
import "android.widget.*"               -- 整个包
import "android.view.View_OnClickListener"   -- 内部类用下划线

导入后类名直接当构造器用:

button = Button(activity)
button.Text = "点我"        -- getter/setter 可简写成属性
layout.addView(button)

写法二:属性简写

Java 的 getXxx() 无参、setXxx(v) 单参时,可以当属性写:

button.Text = "按钮"    -- 等价于 button.setText("按钮")
x = button.X            -- 等价于 x = button.getX()

布局表里那些 text =、orientation = 走的也是同一套转换。

写法三:事件接口

给控件挂监听器,布局表 onClick 是简写;完整写法是造一个接口对象:

listener = View.OnClickListener { onClick = function(v) print(v) end }
button.setOnClickListener(listener)

Lua 的表直接当成 Java 接口的实现传过去——这座桥最妙的地方。

写法四:luajava 全家

需要精确控制时用底层函数(假设相关类已导入):

函数干什么
luajava.bindClass(s)按完整名载入类对象
luajava.newInstance(s, ...)构造实例
luajava.new(cls, ...)同上,接受类对象
luajava.createProxy(s, t)用 Lua 表实现 Java 接口
luajava.createArray(s, t)用 Lua 表造 Java 数组
luajava.astable(o)Java 集合转 Lua 表
luajava.coding(s)字符串转码(默认 GBK 转 UTF-8)

用它的两条纪律

到这里常用模块讲完,回到应用层面——下一组看市场里那些现成文件怎么用。