一、为什么先介绍Component?
Componen是UI组件的基类,它定义了组件许多通用功能和属性,其他组件(Text、Image、Button、ListContainer等)都是继承自该类,类似安卓中的View。
根据OOP面向对象思想,其他组件都是Component的子类,自然就继承了这些功能和属性,无需重复介绍,也更方便没有接触过安卓开发的朋友理解。
二、Component有哪些新增特性?
注意:这些API是安卓系统没有的。
1、 Content(显示内容)限制API
鸿蒙新增了控制组件内部内容显示的方法,如下:
setContentEnable(boolean enable)
该方法用于控制组件内部的内容是否可以显示出来。
为了让例子能否生效,必须使用能否包含内容的组件,这里使用Text,示例如下:
Text text = (Text) findComponentById(ResourceTable.Id_text);
text.setText("HarmonyOS");
// ContentEnable默认为true,设置为false之后,Text组件的内容就不能够显示
text.setContentEnable(false);
此外,鸿蒙还新增了控制内容区域的内容显示的起点位置方法,总共3个如下:
// 同时设置xy两个方向的偏移量
setContentPosition(float x, float y):
// 只设置X方向的偏移量
setContentPositionX(float x):
// 只设置Y方向的偏移量
setContentPositionY(float y):
以上3个方法只能用于“容器组件”,也就是ComponentContainer及其子类。
这里以DirectionalLayout组件举例,布局xml如下:
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:id="$+id:dl"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:orientation="vertical">
<Component
ohos:id="$+id:component"
ohos:height="150vp"
ohos:width="150vp"
ohos:background_element="$graphic:component_state"
ohos:text_alignment="top"
/>
</DirectionalLayout>
DirectionalLayout容器组件中包含组件Component,默认不使用setContentPosition相关方法,Component会位于DirectionalLayout的左上角,并且两者间没有间距。
如果使用代码设置后,Component会相对DirectionalLayout在XY方向上偏移设置的距离,代码如下:
DirectionalLayout layout = (DirectionalLayout) findComponentById(ResourceTable.Id_dl);
layout.setContentPosition(100, 100);
该效果就不用了图片展示了,有兴趣可以使用上面的代码尝试,鸿蒙还新增了许多API,后续知识点会逐一介绍。
2、组件绑定于解绑监听
安卓的View没有直接提供该方法,而是需要先设置视图树观察者,监听该观察者才可以获取该状态回调。
鸿蒙直接为Component对象提供了该API,用起来更快捷方便。比如:可以方便获取Component绑定到Window之后的具体宽高值等数据,使用如下:
component.setBindStateChangedListener(new Component