搜索

【Androlua+技术分享-Toast】

moid   ·   发表于 8个月前   ·   AndroLua+

今天,我们自己调用android-java api封装个提示代码,等价于Androlua+的print()打印函数。和iApp的tw()提示函数/模块


首先要说明的是不管iApp还是Androlua+底层最终都是调用java的android.widget.Toast消息提示类。


我们只通过这个类的makeText()与show()方法就能实现我们想要的代码了


下面是具体Androlua代码:


function tw(str)

require "import"
import "android.widget.Toast"

Toast.makeText(this,str,Toast.LENGTH_SHORT).show()

end

tw("OK")

是一个lua函数,自己封装的。


而require函数是lua自身实现的函数,主要作用是引用模块


而import函数由Androlua+封装实现。主要作用  用来引用java类并转成lua表(table) 供lua调用。


注意:lua函数调用时形参与实参都是一个参数时,并实参是字符串类型时可以不加括号


比如:

require "import"

import "android.widget.Toast"


也可以写成这样:


require("import")

import("android.widget.Toast")


<-----分割线------>

用lua自带的require函数来引用Androlua+的import函数,然后再用import函数来引用java类与对象


require "import"

import "android.widget.Toast"


所以,这两行代码表示。先引用import,然后再用import引用java类。并把实例转成lua表(以“.”分割,最后一个转成对应table名字,比如android.widget.Toast会转成Toast表(lua table))


所以:


Toast.makeText(this,str,Toast.LENGTH_SHORT).show()


这行代码表示调用Toast表的makeText函数(函数名与java方法名对应)。makeText函数有三个参数。


第一个参数是:当前UI主线程实例上下文(对应java的android.content.Context类)


第二个参数是:字符串(对应java的java.lang.CharSequence类,lua的字符串可以与java.lang.CharSequence等价转换)


第三个参数是:整型(对应java的int类型和lua的int类型,lua与java也等价转换)


返回值是:当然对象(实例)上下文,也就是Toast表自身(这个以后有空,我出一章教程专门讲一下了)


所以:


Toast.makeText(this,str,Toast.LENGTH_SHORT).show()


this是一个变量,存在于lua的_G表(全局表)


str也是一个变量,我们从实参获取的。


Toast.LENGTH_SHORT是个Toast表里的一个键与值。


Toast.LENGTH_SHORT也可以写成这样:Toast["LENGTH_SHORT"]


是个int类型


Toast.LENGTH_SHORT表示提示时间2s(2秒)


Toast.LENGTH_LONG表示提示时间3.5s(3.5秒)


2s的:


Toast.makeText(this,str,Toast.LENGTH_SHORT).show()


3.5s的:


Toast.makeText(this,str,Toast.LENGTH_LONG).show()


<-----分割线----->


show()是makeText()函数的返回值的方法。


.....讲一下吧:


Toast.makeText(this,str,Toast.LENGTH_SHORT).show()


这种属于链式调用


local ret = Toast.makeText(this,str,Toast.LENGTH_SHORT)

ret.show()


这种属于过程式调用。



所以:


local ret = Toast.makeText(this,str,Toast.LENGTH_SHORT)

ret.show()



Toast.makeText(this,str,Toast.LENGTH_SHORT).show()


等价的,两种调用方法都可以。


下面是不同写法的封装:


第一种(一行代码搞定):

function tw(str)
require("import")("android.widget.Toast").makeText(this,str,0).show()
end
tw("OK")


第二种:

function tw(str)
require "import"
import "android.widget.Toast"
Toast.makeText(this,str,Toast.LENGTH_SHORT).show()
end
tw("OK")


第三种:


function tw(str)
require("import")
import("android.widget.Toast")
local ret = Toast.makeText(this,str,Toast.LENGTH_SHORT)
ret.show()
end
tw("OK")


第四种:


function tw(str)
local im = require("import")
local t = im("android.widget.Toast")
local ret = t.makeText(this,str,t.LENGTH_SHORT)
ret.show()
end
tw("OK")


第五种:当做是作业,留给你们自己弄

打赏我,让我更有动力~

0 Reply   |  Until 8个月前 | 412 View
LoginCan Publish Content
返回顶部