Corona中文站

强大、易学的跨平台(iOS/Android)开发框架。QQ群1:74390406(满) 群2:221929599

导航

五分钟学会Corona(二十六) - 本地 UI
本地库提供了访问设备的多种本地UI特性。

Activity Indicator

native.setActivityIndicator( )

native.setActivityIndicator( visible ) 显示或隐藏一个平台指定的 activity indicator。Touch Event在indicator 被显示的时候被忽略。

注意,直到lua代码块的结尾,这个indicator才会显示。代码块包含setActivityIndicator(true) 调用已经完全执行。同时,如果你在相同的代码块里显示和隐藏这个indicator,那么indicator并不会正常显示。而是应该,在不同的函数调用或函数回调中,隐藏这个activity indicator。例如,下面的代码使用timer对象在2秒后隐藏indicator。

native.setActivityIndicator( true );

timer.performWithDelay( 2000, function()

native.setActivityIndicator( false )

end)


下面是一个例子,关于 activity indicator 如何使用相同的代码来跨平台的例子。左边的图片是Mac OS X上的Corona模拟器。右边的图片是运行在iPhone上的相同的应用。



Alert

native.showAlert( )

native.showAlert( title, message [, buttonLabels [, listener]] )

用一个本地警告框控件,来显示有一个或多个按钮的弹出警告框。程序窗口,包括动画,将继续在后台运行,但是所有其他用户交互将被阻塞,直到用户选择一个按钮或者取消对话框。

title和message字符串是被显示在警告框里的标题和消息文本。buttonLabels是一个字符串table,每个字符串将创建一个对应标签的按钮。你应该至少包括一个buttonLabels,或没有任何按钮的对话框。第一个按钮将有唯一的颜色来提示用户默认已经选择了它。

在警告框中的按钮的最大个数是6。最一般的格式是一个或两个按钮,例如“OK”和“Cancel”。

当一个用户按下警告对话框里的任何一个按钮,这个listener将被提醒,它可以通过它的数字index,赋予一个活动到对应的每个按钮上:第一个按钮是索引1,第二个是索引2,以此类推。listener即可是一个函数listener,也可以是一个table listener。如果listener是一个table,它必须有一个completion方法。这个被分发到listener的事件将会是一个completion event。它将包含下面附加属性:

event.action

event.action 指明警告框是如何被取消的:

• "cancelled" 表示native.cancelAlert()被调用来关闭警告框。

• "clicked" 表示用户点击一个按钮来关闭的警告框。

event.index

event.index 是一个被按下的按钮的索引。它对应于buttonLabels参数。

-- Handler that gets notified when the alert closes

local function onComplete( event )

if "clicked" == event.action then

local i = event.index

if 1 == i then

-- Do nothing; dialog will simply dismiss

elseif 2 == i then

-- Open URL if "Learn More" (the 2nd button) was clicked

system.openURL( "http://developer.anscamobile.com" )

end

end

end



-- Show alert with five buttons

local alert = native.showAlert( "Corona", "Dream. Build. Ship.",

{ "OK", "Learn More" }, onComplete )


注意:当在Corona模拟器中运行时,显示的警告框将时本地mac os X的警告表,而不是一个iPhone警告框(左边显示的)。在iPhone上,警告框彩绘和本地的警告框一样(右边):

native.cancelAlert( )

native.cancelAlert( alert ) 编程方式取消警告框。例如,你应该希望有一个自动弹出警告,在用户不点击经过10秒后就自动消失。这时,你就需要在一个10秒的timer中调用这个函数。

-- Dismisses "alert" from previous code sample after 10 seconds

local function cancelMyAlert()

native.cancelAlert( alert )

end



timer.performWithDelay( 10000, cancelMyAlert )


范例

更多关于如何使用本地警告框的例子,参看 Corona SDK 中范例代码目录中的Alert项目。

字体

native.newFont( )

native.newFont( name [, size] ) 创建一个字体对象,你可以在本地的文本字段和文本对话框中使用以指定字体。 你也可以把它作为一个参数传给 display.newText() 函数,来显示文本对象。

参数name是一个字体名称的字符串。你可以通过native.getFontNames()获得一个有效字体的数组。另外,你也可以把下面常量传入,来代替字符串:

• native.systemFont

• native.systemFontBold


size参数是可选的。你可以用它来指定字体的点阵大小。默认情况下,它是设备上的标准系统字体大小。

native.getFontNames()

返回一个有效本地字体的数组。

注意:在模拟器上,有效字体可能和设备上的有效字体不能实际对应。一般,iPhone设备字体可以在MacOS中的模拟器被访问,但是额外的mac字体也是有效的,这部分可能在iPhone不能用。如果你遇到一个问题,字体在模拟器上可以显示,但不能在你的设备上显示,这非常有可能是这个原因导致的。当你怀疑是这个问题时,你可以用 native.getFontNames()来检测有效的设备字体名。

Text Input

native.newTextField( )

native.newTextField( left, top, width, height [, listener] ) 为文本输入创建一个单行文本框

属性

object.align

object.align 可以是一个字符串 "left", "center", 或 "right".

object.font

object.font 从native.newFont()返回的一个字体对象。

object.isSecure

object.isSecure 控制文本是否被隐藏,例如密码,或其他。默认为false。

object.size

object.size 是文本的大小

object.text

object.text 文本框内容的一个字符串

方法:

object:setTextColor( )

object:setTextColor( r, g, b [, a] ) sets the color of the text.

注意: 本地textfield只有在设备上才有效

因为本地textfield并不是OpenGL画板的一部分,他们不服从Corona显示对象层次。例如,当他们被用display object的方法来控制时,他们一直会显示普通display object的上面。

另外他们不继承group对象的属性,例如isVisible,x,y和alpha。如果你需要设置显示属性给本地对象,那么直接把属性加到对象上。

为了从显示屏幕上删除一个本地textfield,请使用object:removeSelf().

监听键盘事件

你可以可选的提供一个listener函数,负责键盘事件。这些事件都有一个“阶段”属性,如下面:

event.phase = "began" -- 这表示 “键盘已经显示”事件。根据你的界面设计,你可能想要当键盘在屏幕上时,调整屏幕内容。

event.phase = "ended" -- 当用户停止编辑一个textfield时这个事件被调用:例如,当他们触到了别的textfield。

event.phase = "submitted" -- 当用户按下了屏上键盘的“return”键,这个事件就会发生。

如果你选择了使用一个table listener来处理这个事件,这个事件的名称是“userInput”。

native.setKeyboardFocus( )

native.setKeyboardFocus( textField ) S设置键盘焦点到一个textfield上,并且显示键盘。传如nil可以删除焦点,并取消键盘。

支持的键盘类型

在输入textfield中有五种键盘类型被支持,用一个名叫“inputType”属性名来区别。这个属性是可选的。参看 Interface/NativeKeyboard 范例代码,可以演示多种有效类型。

例子:

numericField = native.newTextField( 50, 150, 220, 36, handlerFunction )

numericField.inputType = "number"


inputType属性有五种可能的值:

• "default" - 默认键盘,支持一般文本,数字和标点。

• "number" - 一个数字键盘

• "phone" - 输入电话号码的数字键盘

• "url" - 输入网页URL的键盘

• "email" - 输入电子邮件地址的键盘


正如以前,你可以设置 isSecure布尔值,以创建密码输入域:

passwordField.isSecure = true


多行 Textfields

native.newTextBox( )

native.newTextBox( left, top, width, height ) 创建一个可滚动,多行的文本框。

属性:

object.align

object.align 可以是字符串"left", "center", 或 "right"。

object.font

object.font 是 native.newFont()返回的字体对象。

object.hasBackground

object.hasBackground 当有背景的时候返回true,当背景是透明的时候返回false。

object.size

object.size 文本的大小

object.text

object.text 包含一个字符串的文本框

方法:

object:setTextColor( )

object:setTextColor( r, g, b [, a] )

注意: 该特性只在设备上有效

注意: 本地textBoxes只有在设备上才有效

因为本地textBoxes并不是OpenGL画板的一部分,他们不服从Corona显示对象层次。例如,当他们被用display object的方法来控制时,他们一直会显示普通display object的上面。

另外他们不继承group对象的属性,例如isVisible,x,y和alpha。如果你需要设置显示属性给本地对象,那么直接把属性加到对象上。

为了从显示屏幕上删除一个本地textfield,请使用object:removeSelf().

Web Popups

web popup让你的app打开一个本地和远程的web页。web popup的内容被一个URL指定。例如,参看 WebOverlay sample。

注意 Web popups 只在设备上有效。

为了创建一个 Web Popup 可使用这个方法 native.showWebPopup( ).

范例:

native.showWebPopup( "http://www.anscamobile.com" )


这将会创建一个图层来显示你的web页面,充满整个屏幕。默认情况下,url被假设为一个远程服务器的绝对url。

另外,你也可以在x,y位置以及任何宽高来创建这个web popup,而不用占据整个屏幕。

native.showWebPopup( 10, 10, 300, 300, "http://www.anscamobile.com" )


Web popup 伸缩

为了确保HTML内容被恰当的伸缩,可添加下面元素到你的html文档中:




为了阻止一个web popup中的文本内修改大小,可以添加如下样式到你的html文档中:




Web Popup 选项

第六个参数是可选参数,options,它允许你自定义一些特性。这个参数必须被作为一个table传入,例如:

native.showWebPopup( 10, 10, 300, 300, "http://www.anscamobile.com", {urlRequest=listener} )


你可以在你的options table中,赋予如下属性:

options.baseUrl 确定url是被作为一个相对还是绝对url来解释。默认(nil)意味着url是绝对的。为了加载一个本地文件,可以把base url设置为 base directory constants 常量中的一个,例如 system.ResourceDirectory。然后url参数是相对于base directory的。如远程文件,你也可以指定一个远程base,让url参数相对于这个远程base路径。

options.hasBackground 控制popup是否有一个不透明背景。没有指定的话,背景是不透明的。

options.urlRequest 指定一个函数来解释所有来自web popup的urlRequest 事件。这也提供了一个标准方法,来用伪url来从web传回信息。例如, Interface/WebOverlay 范例工程显示了包含如下HTML的本地html页:







当用户在web popup上点击submit,指定的listener函数被发送一个 urlRequest事件对象,其属性设置了 "corona:close",允许应用程序做出适当的反应。

删除 Web Popup

为了删除和取消web popup,请使用方法 native.cancelWebPopup()。如果web popup在调用前显示就返回true,否则false。

处理 Web Popup 事件

如果你提供了一个event处理器给 你的可选table的urlRequest属性,web popup将传事件到你的处理器,当用户点击webpage上的链接时。它可能回传下列事件:

event.errorCode

event.errorMessage

event.name

event.url


为了确保你的事件处理器,每次被点击时只被激活一次,请在执行你的代码之前检查一下errorMessage。否则你的处理器,可能被开始的点击激活,并且被传入任何错误。例如:

function listener( event )

--if no errors, then execute my code

if event.errorMessage == nil then

myOnClickHandler( event.url )

end

return true

end



local options = {

baseUrl = system.ResourceDirectory,

hasBackground = false,

urlRequest = listener

}



native.showWebPopup( "test.html", options )
<< 五分钟学会Corona(二十五) - Event 和 Listener五分钟学会Corona(二十七) - 性能和优化 >>

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

Powered By Z-Blog 1.8 Walle Build 100427 Copyright 2011-2015 BuildApp.Net. All Rights Reserved.