Sollyu

  • 捐赠
  • 关于
  1. 首页
  2. 原创文章
  3. 正文

Lua 4 android

2014年5月28日 5455点热度 1人点赞 0条评论

测试界面

Lua 4 android

1. 下载我整理好的Lua工程。

Lua 4 android
下载地址: Lua 4 android

加入到Eclipse

打开Eclipse新建一个空白工程,这里命名Lua4AndroidDemo,其他的均为默认。
Lua 4 android

复制lua文件到本项目工程

Lua 4 android
Lua 4 android

Eclipse刷新工程

Lua 4 android

修改主Activity

Lua 4 android
增加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

运行截图

三个按钮依次点击截图
Lua 4 android
Lua 4 android
Lua 4 android

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: Android lua
最后更新:2014年5月28日

sollyu

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2021 sollyu.com. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

苏ICP备15007531号