lua学习笔记 2 android调用Lua。Lua脚本中实现添加Button,并为Button增加Listener

来源:互联网 发布:app软件编程 编辑:程序博客网 时间:2024/05/22 10:22

lua学习笔记: 2 android调用Lua。Lua脚本中实现添加Button,并为Button增加Listener

android 中的调用

  1. try {  
  2.   
  3.     mLuaState.LdoString(readStream(getResources().openRawResource(  
  4.             R.raw.test)));  
  5.     // 找到functionInLuaFile函数  
  6.     mLuaState.getField(LuaState.LUA_GLOBALSINDEX, "addButton");  
  7.     mLuaState.pushJavaObject(getApplicationContext());// 第一个参数 context  
  8.     mLuaState.pushJavaObject(mLayout);//第二个参数, Layout  
  9.     mLuaState.call(20);// 2个参数,0个返回值  
  10.   
  11. catch (Exception e) {  
  12.     e.printStackTrace();  
  13.   
  14. }  

readStream 实现

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. private String readStream(InputStream is) {  
  2.     try {  
  3.         ByteArrayOutputStream bo = new ByteArrayOutputStream();  
  4.         int i = is.read();  
  5.         while (i != -1) {  
  6.             bo.write(i);  
  7.             i = is.read();  
  8.         }  
  9.         return bo.toString();  
  10.     } catch (IOException e) {  
  11.         Log.e("ReadStream""读取文件流失败");  
  12.         return "";  
  13.     }  
  14. }  

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

  1.   -- lua 实现方法,增加一个Button,点击Button, Toast显示Button标题。  
  2. function addButton(context,layout)  
  3.     btn = luajava.newInstance("android.widget.Button",context)  
  4.     btn:setText("lua add button ")  
  5.       
  6.     -- 第一种方法<span style="font-family:Arial;">Listener 实现方法 </span>  
  7.   
  8.     button_cb = {  
  9.         onClick = function(v)  
  10.             print(tostring(v))  
  11.             local Toast = luajava.bindClass('android.widget.Toast')  
  12.             Toast:makeText(context, v:getText(), Toast.LENGTH_SHORT):show()  
  13.         end  
  14.     }  
  15.     local listener = luajava.createProxy("android.view.View$OnClickListener", button_cb);  
  16.     --[[ -- 第二种方法Listener实现方法  
  17.     local listener = luajava.createProxy("android.view.View$OnClickListener", {  
  18.           
  19.             onClick = function(v)  
  20.                 print(tostring(v))  
  21.                 local Toast = luajava.bindClass('android.widget.Toast')  
  22.                 Toast:makeText(context, v:getText(), Toast.LENGTH_SHORT):show()  
  23.             end  
  24.           
  25.     })  
  26.     ]]--  
  27.     btn:setOnClickListener(listener)  
  28.       
  29.     layout:addView(btn)  
  30.   
  31. end  
写Lua脚本还不习惯,还按 c java 的习惯,在后面加";"


完毕


0 0
原创粉丝点击