AndroLua学习(4)——布局与视图

一、布局负责管理视图如何显示
1、线性布局 LinearLayout
按照水平或者垂直方向布局组件
orientation:设置布局方向
gravity:控制布局对齐方式
layout_weight:控制各个控件在布局中的相对大小。

2、帧布局 FrameLayout
要求自行指定停靠与位置。从屏幕右上角(0,0)开始布局,多个组件层叠排列。第一个添加的组件在最底层,最后的一个在最上层。
3、表格布局 TableLayout
表格布局是一个ViewGroup以表格显示它的子视图(view)元素,即行和列标识一个视图的位置。
表格布局常用的属性如下:
collapseColumns:隐藏指定的列
shrinkColumns:收缩指定的列以适合屏幕,不会挤出屏幕
stretchColumns:尽量把指定的列填充空白部分
layout_column:控件放在指定的列
layout_span:该控件所跨越的列数

4、相对布局 RelativeLayout
相对其他组件布局
相对布局是按照组件之间的相对位置来布局,比如在某个组件的左边,右边,上面和下面等。

5、绝对布局(AbsoluteLayout)
采用坐标轴的方式定位组件,左上角是(0,0)点,往右x轴递增,往下Y轴递增,组件定位属性为layout_x 和layout_y来确定坐标。

二、视图则显示具体内容,如TextView可以向用户展示文字内容,Button可以响应用户点击事件。

创建一个线性布局
layout=LinearLayout(activity)
创建一个按钮视图
button=Button(activity)
将按钮添加到布局
layout.addView(button)
将刚才的内容设置为活动内容视图
activity.setContentView(layout)
注.activity是当前窗口的Context对象,如果你习惯也可以使用this
button=Button(this)

三、常见控件
Button(按钮控件)、TextView(文本控件)、EditText(编辑框控件)

常用API:
id.setText(“文本”)–设置控件文本
id.getText()–获取控件文本
id.setWidth(300)–设置控件宽度
id.setHeight(300)–设置控件高度

点击事件
id.onClick=function()
print”你触发了点击事件”
end

长按事件
id.onLongClick=function()
print”你触发了长按事件”
end

图片控件(ImageView与ImageButton)
设置图片
布局表中用src属性就可以,如:src=图片路径,

动态设置
id.setImageBitmap(loadbitmap(图片路径))
设置Drawable对象
import “android.graphics.drawable.BitmapDrawable”
id.setImageDrawable(BitmapDrawable(loadbitmap(图片路径)))

缩放,scaleType
字段
CENTER  –按原来size居中显示,长/宽超过View的长/宽,截取图片的居中部分显示 
CENTER_CROP –按比例扩大图片的size居中显示,使图片长(宽)等于或大于View的长(宽) 
CENTER_INSIDE –完整居中显示,按比例缩小使图片长/宽等于或小于View的长/宽 
FIT_CENTER –按比例扩大/缩小到View的宽度,居中显示 
FIT_END –按比例扩大/缩小到View的宽度,显示在View的下部分位置 
FIT_START –按比例扩大/缩小到View的宽度,显示在View的上部分位置 
FIT_XY –不按比例扩大/缩小到View的大小显示 
MATRIX –用矩阵来绘制,动态缩小放大图片来显示。 

点击与长按事件同上

四、使用布局表
使用布局表须导入android.view与android.widget包。

require "import"
import "android.widget.*"
import "android.view.*"

布局表格式

layout={
    控件类名称,
    id=控件名称,
    属性=值,
    {
        子控件类名称,
        id=控件名称,
        属性=值,
        }
    }

例如:

layout={
  LinearLayout,--视图类名称
  id="linear",--视图ID,可以在loadlayout后直接使用
  orientation="vertical",--属性与值
  {
    TextView,--子视图类名称
    text="hello AndroLua+",--属性与值
    layout_width="fill"--布局属性
  },
}

使用loadlayout函数解析布局表生成布局。
activity.setContentView(loadlayout(layout))
也可以简化为:
activity.setContentView(layout)
如果使用单独文件布局(比如有个layout.aly布局文件)也可以简写为:
activity.setContentView(“layout”)
此时不用导入布局文件。

布局表支持大全部安卓控件属性,
与安卓XML布局文件的不同点:
id表示在Lua中变量的名称,而不是安卓的可以findbyid的数字id。
ImageView的src属性是当前目录图片名称或绝对文件路径图片或网络上的图片,
layout_width与layout_height的值支持fill与wrap简写,
onClick值为lua函数或java onClick接口或他们的全局变量名称,
背景background支持背景图片,背景色与LuaDrawable自绘制背景,背景图片参数为是当前目录图片名称或绝对文件路径图片或网络上的图片,颜色同backgroundColor,自绘制背景参数为绘制函数或绘制函数的全局变量名称,
控件背景色使用backgroundColor设置,值为”十六进制颜色值”。
其他参考loadlayout与loadbitmap