安卓类库封装(语法)
本章将讲解封装及编写轻语言安卓类库组件的详细实现细节,轻语言安卓程序的类库组件采用 Java 语言编写,正式编写之前您需要掌握基础的 Java 编程知识。
基础
类型映射
使用 Java 编写安卓组件时,需要将 Java 的数据类型映射到轻语言的数据类型,反之亦然。下表列出了轻语言对应的 Java 同等数据类型:
轻语言 | Java |
---|---|
逻辑型 | boolean |
字节型 | byte |
短整数 | short |
整数型 | int |
长整数 | long |
单精度小数 | float |
双精度小数 | double |
文本型 | java.lang.String |
对象 | java.lang.Object |
原生类型包装
轻语言每个组件默认都由一个 Java 类组成,其中表示可视组件的类必须继承自轻语言安卓框架中的 视图
类型,视图
是每个可视组件的基础数据类型,视图
拥有所有可视组件公有的属性,函数和事件,表示不可视组件的类与 Java 标准类的封装完全一致,无需继承额外的基类。
表示可视组件的类必须实现基类视图的抽象函数 createView()
,该函数需返回一个安卓标准 View
对象,一般该对象会被定义为一个私有的类成员变量,该成员变量表示需要被封装的安卓原生组件,代码示例:
// 自定义封装一个默认背景为蓝色、文本为白色的按钮
public class 蓝色按钮 extends 视图
{
// 定义类成员变量安卓原生按钮对象
private Button mButton;
// 重写并实现抽象函数,该函数返回安卓原生 View 对象
@Override
public View createView()
{
// 轻语言安卓框架的默认上下文,创建原生对象时必须使用:MainActivity.getContext()
mButton = new TextView(MainActivity.getContext());
mButton.setBackgroundColor(Color.BLUE);
mButton.setTextColor(Color.WHITE);
return mButton;
}
}
当上方的 蓝色按钮
在轻语言安卓程序中被创建时,系统首先将执行 createView
函数获取封装返回的原生安卓 Button
对象,并将其添加到窗口中。
属性
属性是一种类似字段的成员变量,通常使用 =
符号取值、赋值,但由于 Java 语言本身不支持属性功能,因此在编写轻语言安卓组件时,在 Java 代码中我们使用 伪属性
来定义属性,具体实现方式是:
当代码中含有两个相同名称的方法时,且这两个方法满足一个赋值,一个取值,且值的数据类型完全一样时,我们则规定在轻语言中,这两个方法表示一个属性。
代码示例:
// 自定义封装一个默认背景为蓝色、文本为白色的按钮
public class 蓝色按钮 extends 视图
{
// 定义类成员变量安卓原生按钮对象
private Button mButton;
// 重写并实现抽象函数,该函数返回安卓原生 View 对象
@Override
public View createView()
{
// 轻语言安卓框架的默认上下文,创建原生对象时必须使用:MainActivity.getContext()
mButton = new TextView(MainActivity.getContext());
mButton.setBackgroundColor(Color.BLUE);
mButton.setTextColor(Color.WHITE);
return mButton;
}
/** 设置按钮的标题文本内容。 */
public void 标题(String text)
{
this.mButton.setText(text);
}
/** 获取按钮的标题文本内容。 */
public String 标题()
{
return this.mButton.getText().toString();
}
}
上方代码中名为 标题 的方法,一共有 2 个,并且满足一个方法取值,一个方法赋值,且目标操作值的数据类型都为 String(文本型)
,那么我们规定在轻语言中,这两个方法为一个 属性。在编写组件配置文档时,应该以属性方式添加。
例如在配置XML文档时:
<control name="蓝色按钮" comment="蓝色按钮组件;默认背景蓝色,字体白色。">
<property name="标题" type="文本型" comment="设置或获取当前按钮的标题内容。" />
</control>
在轻语言中使用时:
变量 蓝色按钮1 = 创建 蓝色按钮()
蓝色按钮1.标题 = "自定义按钮1"
调试输出(蓝色按钮1.标题)
函数
Java 代码中的方法即为轻语言中的函数。例如:
// 自定义封装一个默认背景为蓝色、文本为白色的按钮
public class 蓝色按钮 extends 视图
{
// 定义类成员变量安卓原生按钮对象
private Button mButton;
// 重写并实现抽象函数,该函数返回安卓原生 View 对象
@Override
public View createView()
{
// 轻语言安卓框架的默认上下文,创建原生对象时必须使用:MainActivity.getContext()
mButton = new TextView(MainActivity.getContext());
mButton.setBackgroundColor(Color.BLUE);
mButton.setTextColor(Color.WHITE);
return mButton;
}
/** 设置按钮的标题文本内容。 */
public void 标题(String text)
{
this.mButton.setText(text);
}
/** 获取按钮的标题文本内容。 */
public String 标题()
{
return this.mButton.getText().toString();
}
/** 判断当前按钮的标题是否等于指定字符串内容。 */
public boolean 标题等于(String value)
{
return this.mButton.getText().equals(value);
}
}
配置XML文档:
<control name="蓝色按钮" comment="背景为蓝色、字体为白色的按钮组件">
<property name="标题" type="文本型" comment="设置或获取当前蓝色按钮的标题。" />
<method name="标题等于" return="逻辑型" args="(内容 为 文本型)" comment="判断当前按钮的标题是否等于指定字符串内容。" />
</control>
事件
轻语言中事件的定义与 Java 的回调接口一致;由于 Java 本身不支持使用事件驱动方式进行回调,因此在轻语言中表示事件时、需要对其声明的回调接口做格式化处理,类似在 Java 中约定俗成的使用 “On”或“on”开头来表示回调一样,轻语言规定:
以 置
字开始设置回调接口的方法。
以 回调
结尾作为回调接口的名称。
以 事件名称
作为回调接口名称。
例如现在我们要监听组件被拖拽,示例代码:
// 自定义封装一个默认背景为蓝色、文本为白色的按钮
public class 蓝色按钮 extends 视图
{
// 定义类成员变量安卓原生按钮对象
private Button mButton;
// 重写并实现抽象函数,该函数返回安卓原生 View 对象
@Override
public View createView()
{
// 轻语言安卓框架的默认上下文,创建原生对象时必须使用:MainActivity.getContext()
mButton = new TextView(MainActivity.getContext());
mButton.setBackgroundColor(Color.BLUE);
mButton.setTextColor(Color.WHITE);
return mButton;
}
/** 设置按钮的标题文本内容。 */
public void 标题(String text)
{
this.mButton.setText(text);
}
/** 获取按钮的标题文本内容。 */
public String 标题()
{
return this.mButton.getText().toString();
}
/** 判断当前按钮的标题是否等于指定字符串内容。 */
public boolean 标题等于(String value)
{
return this.mButton.getText().equals(value);
}
/** 定义组件被拖拽时接收回调事件的方法。 */
public void 置被拖拽回调(final 被拖拽回调 iOnDrag)
{
mButton.setOnDragListener(new OnDragListener()
{
@Override
public boolean onDrag(View v, DragEvent event)
{
if(iOnDrag != null)
iOnDrag.被拖拽(蓝色按钮.this);
return true;
}
});
}
/** 表示处理被拖拽的回调,对“被拖拽”这个事件做一个封装。 */
public interface 被拖拽回调
{
void 被拖拽(视图 view);
}
}
上方在轻语言中对应的事件为:被拖拽
配置文档XML编写格式为:
<control name="蓝色按钮" comment="背景为蓝色、字体为白色的按钮组件">
<method name="置被拖拽回调" return="" args="(回调对象 为 被拖拽回调)" comment="设置被拖拽回调。" />
<interface name="被拖拽回调" comment="蓝色按钮的被拖拽回调接口。">
<event name="被拖拽" return="" args="(源对象 为 视图)" comment="当被拖拽时触发并回调该事件。" />
</interface>
</control>
在轻语言中使用,假设已编译为类库文件并且已安装到VcnStudio指定目录,在工具箱中选中 蓝色按钮
组件,并将其添加到APP窗口中,在属性框事件下拉列表中选择事件:被拖拽
IDE 将自动在代码编辑器中生成对应的事件代码块,示例:
事件 蓝色按钮1.被拖拽(来源对象 为 视图)
调试输出("蓝色按钮1被拖拽")
结束 事件
注意:这里的被拖拽事件只是一个简单的演示,具体封装时,可能会返回事件参数。