lua学习笔记

来源:互联网 发布:迁都南京 知乎 编辑:程序博客网 时间:2024/06/15 01:16

android 调用Lua, Lua脚本启动Intent


android 中的调用

try {
 mLuaState.LdoString(readStream(getResources().openRawResource( R.raw.testLua))); // 找到functionInLuaFile函数
 mLuaState.getField(LuaState.LUA_GLOBALSINDEX, "launchIntent");  
mLuaState.pushJavaObject(getApplicationContext()); mLuaState.call(1, 0);
 } catch (Exception e) { 
e.printStackTrace();
 }

在Android 工程 res/raw/新建lua脚本 testLua.lua


-- 启动 intent 
function launchIntent(context)
 -- new 一个java 实例 
local intent = luajava.newInstance("android.content.Intent")
 intent:addFlags(0x10000000)
 intent:setAction("android.intent.action.VIEW")
 -- bind 一个Java实例,<span style="background-color: rgb(240, 240, 240); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">调用static 方法</span>
<span style="background-color: rgb(240, 240, 240); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;"> local uri = luajava.bindClass("android.net.Uri")</span>
<span style="background-color: rgb(240, 240, 240); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;"> intent:setData(uri:parse("http://blog.csdn.net/hpccn")) </span>
<span style="background-color: rgb(240, 240, 240); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">context:startActivity(intent); </span>
<span style="background-color: rgb(240, 240, 240); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">end</span>


lua 调用 Java中静态类与非静态类的方法不同。

静态类使用

uri = luajava.bindClass("android.net.Uri")

非静态类

intent = luajava.newInstance("android.content.Intent")

在Lua脚本中发启一个Intent, 打开一个网页,就是本人的博客。

android调用Lua。

Lua脚本中实现添加Button,并为Button增加Listener android 中的调用

        try {
      mLuaState.LdoString(readStream(getResources().openRawResource( R.raw.test))); <span style="background-color: rgb(240, 240, 240);">// 找到functionInLuaFile函数 </span>
     mLuaState.getField(LuaState.LUA_GLOBALSINDEX, "addButton");
    mLuaState.pushJavaObject(getApplicationContext());// 第一个参数 
   context mLuaState.pushJavaObject(mLayout);//第二个参数, 
    Layout mLuaState.call(2, 0);// 2个参数,0个返回值 
    } catch (Exception e) 
<span style="background-color: rgb(240, 240, 240);">    { </span>
<span style="background-color: rgb(240, 240, 240);">e.printStackTrace();</span>
<span style="background-color: rgb(240, 240, 240);"> }</span>

readStream 实现

private String readStream(InputStream is) { 
     try {
    ByteArrayOutputStream bo = new ByteArrayOutputStream();
     int i = is.read();
    while (i != -1) { 
   bo.write(i); i = is.read(); 
    } 
 return bo.toString(); 
  } catch (IOException e) {
  Log.e("ReadStream", "读取文件流失败"); return "";
 } } 

在Android 工程 res/raw/新建lua脚本 testLua.lua

-- lua 实现方法,增加一个Button,点击Button, Toast显示Button标题。 
  function addButton(context,layout)
    btn = luajava.newInstance("android.widget.Button",context)
   btn:setText("lua add button ")  -- 第一种方法<span style="font-family: Arial;">Listener 实现方法 </span>
  button_cb = {
   onClick = function(v) print(tostring(v)) 
   local Toast = luajava.bindClass('android.widget.Toast') 
  Toast:makeText(context, v:getText(), Toast.LENGTH_SHORT):show()
   end
   } 
local listener = luajava.createProxy("android.view.View$OnClickListener", button_cb); --[[ -- 第二种方法Listener实现方法 
local listener = luajava.createProxy("android.view.View$OnClickListener", {
   onClick = function(v) 
  print(tostring(v))
  local Toast = luajava.bindClass('android.widget.Toast') 
  Toast:makeText(context, v:getText(), Toast.LENGTH_SHORT):show() 
end  }) ]]-- 
btn:setOnClickListener(listener)
 layout:addView(btn) 
 end

写Lua脚本还不习惯,还按 c java 的习惯,在后面加";"


完毕


0 0
原创粉丝点击