测试界面
1. 下载我整理好的Lua工程。
加入到Eclipse
打开Eclipse新建一个空白工程,这里命名Lua4AndroidDemo
,其他的均为默认。
复制lua文件到本项目工程
Eclipse刷新工程
修改主Activity
增加3个按钮,对应代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:onClick="button1_click"
android:text="基本语句" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_alignRight="@+id/button1"
android:layout_below="@+id/button1"
android:onClick="button2_click"
android:text="外部加载" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button2"
android:layout_alignRight="@+id/button2"
android:layout_below="@+id/button2"
android:onClick="button3_click"
android:text="UI交互" />
<LinearLayout
android:id="@+id/layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button3"
android:layout_alignParentBottom="true"
android:layout_alignRight="@+id/button3"
android:layout_below="@+id/button3"
android:orientation="vertical" >
</LinearLayout>
</RelativeLayout>
MainActivity增加代码
完整代码如下:
package com.example.lua4androiddemo;
import org.keplerproject.luajava.Extend;
import org.keplerproject.luajava.LuaState;
import org.keplerproject.luajava.LuaStateFactory;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;
public class MainActivity extends Activity {
//Lua解析和执行由此对象完成
private LuaState mLuaState;
//用于演示
private LinearLayout mLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLuaState = LuaStateFactory.newLuaState();
mLuaState.openLibs();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
/**
* 基本语句 按钮点击
* @param v
*/
public void button1_click(View v) {
mLuaState.resume(0);
// 定义一个Lua变量
mLuaState.LdoString("varSay = [[Hello, I'm Sollyu.\r\nThis is Lua,So Easy.]];");
// 获取
mLuaState.getGlobal("varSay");
Toast.makeText(getApplicationContext(), mLuaState.toString(-1), Toast.LENGTH_LONG).show();
// 弹出堆栈
mLuaState.pop(1);
}
/**
* 外部加载 按钮点击
* @param v
*/
public void button2_click(View v) {
mLuaState.resume(0);
// 加载外部脚本,这里我放在raw文件夹中,名称为:greet.lua
mLuaState.LdoString(Extend.readStream(getResources().openRawResource( R.raw.greet)));
// 找到functionInLuaFile函数
mLuaState.getGlobal("showIam");
// 将参数压入栈
mLuaState.pushString("Sollyu");
// functionInLuaFile函数有一个参数,一个返回结果
mLuaState.pcall(1, 1, 0);
// 输出
Toast.makeText(getApplicationContext(), mLuaState.toString(-1), Toast.LENGTH_LONG).show();
// 弹出堆栈
mLuaState.pop(1);
}
/**
* UI交互 点击
* @param v
*/
public void button3_click(View v) {
mLayout = (LinearLayout)findViewById(R.id.layout);
mLuaState.LdoString(Extend.readStream(getResources().openRawResource( R.raw.greet)));
// 找到functionInLuaFile函数
mLuaState.getField(LuaState.LUA_GLOBALSINDEX, "callAndroidApi");
mLuaState.pushJavaObject(getApplicationContext());
mLuaState.pushJavaObject(mLayout);
mLuaState.pushString("设置到TextView的数据");
mLuaState.call(3, 0);
}
}
greet.lua内容如下
-- 测试函数
function showIam(szName)
return "hi,i'm " .. szName .. " .";
end
-- 此函数由Java代码调用。接受三个参数。并调用这些Android组件的方法。
function callAndroidApi(context,layout,tip)
-- 创建一个Android TextView
tv = luajava.newInstance("android.widget.TextView",context)
-- 调用TextView的方法
tv:setText(tip)
-- 调用Layout的方法
layout:addView(tv)
end
运行截图
三个按钮依次点击截图