初次体验HarmonyOS,里边也有Android中相对应的各种Component,开发过程中Layout布局优化,减少层级等,一般会用到include、marge、ViewStub等标签,是比较方便的。
随着开发的深入,HarmonyOS也提供了对应的标签:include、ComponentHolder。其中ComponentHolder功能和Android中ViewStub的功能类似,但ViewStub继承与View,本身就是个View,而ComponentHolder没有继承与Component,其内部处理稍有区别。
ComponentHolder提供的两个公共方法:
show() 与ViewStub中inflate()方法功能类似,但show()可多次进行调用,其调用必须和hide()方法成对出现,否则将会抛出:IllegalArgumentException("Invalid index supplied to " + component)异常。内部实现主要将标签中的layout Component添加进父容器中。
hide() 可多次调用,内部实现主要将标签中的layout Component从父容器中移除。之所以可以多次调用,其方法中做了try{}catch(){}处理而已。
使用方法:
布局中使用:
<ComponentHolder
ohos:id="$+id:component_holder"
ohos:layout="$layout:test_layout"
ohos:height="match_content"
ohos:width="match_content"
/>
由于设计原因,ComponentHolder标签外部可使用一个ComponentContainer包一层,可减少崩溃的发生。
ComponentHolder componentHolder = directionalLayout.findComponentHolderById(ResourceTable.Id_component_holder);
componentHolder.show();
componentHolder.hide();
show() 和 hide()标签需要成对出现才可多次show。