鸿蒙开源三方组件------自定义注解布局样式Barber 精华
1.Barber简介
一个自定义视图样式库。提供了一个简单的基于自定义注释@StyledAttr的style接口来定义视图样式。通过自定义注释@StyledAttr和@Required,将xml中自定义属性与代码中的变量绑定赋值,保证在不修改代码只调整xml即可达到调整视图的效果。注解@OhosAttr主要针对ohos自身属性,使用方式和@StyledAttr一致。
2.使用一览
2.1注解@StyledAttr的使用
在主界面ability_main.xml中定义如下属性:
在BarberView.java代码中使用注解@StyledAttr(value = ResourceTable.String_stripeColor, kind = Kind.COLOR),如下图:
不需要再对这三个变量进行赋值,通过注解已经绑定到xml的对应属性,并赋值,直接使用即可,如下图:
2.2注解@OhosAttr的使用
OhosAttr的使用和StyleAttr相类似,Xml中定义top_margin为140vp,如图所示:
定义变量mTop_margin,使用注解@OhosAttr,mTop_margin不赋值,直接打印mTop_margin, 日志中可以看到mTop_margin成功赋值,为 xml中的ohos:top_margin的值,如下图所示:
3.根因分析
在app编译之前,注解编译器编译生成了BarberView$$Barbershop.java文件,对xml进行了解析,并且对注解变量进行了赋值,相当于注解变量和xml属性进行了绑定。
BarberView$$Barbershop.java文件为注解编译器根据compile相关代码自动生成,会根据xml中定义属性变化发生变化。
例如,2.1操作生成的注解文件BarberView$$Barbershop.java代码如下:
package com.io.sweers.barber.sample;
import com.io.sweers.barber.Barber;
import com.io.sweers.barber.api_annotation.WeakHashSet;
import java.lang.Override;
import java.lang.String;
import ohos.agp.components.AttrSet;
public class BarberView$$Barbershop<T extends com.io.sweers.barber.sample.BarberView> implements Barber.IBarbershop<T> {
protected WeakHashSet lastStyledTargets = new WeakHashSet();
@Override
public void style(final T target, final AttrSet set) {
this.lastStyledTargets.add(target);
if (set == null) {
return;
}
// Retrieve custom attributes
String b = target.getContext().getString(33554435);
if (set.getAttr(b).isPresent()) {
target.poleWidth = set.getAttr(b).get().getDimensionValue();
}
String a = target.getContext().getString(33554436);
if (set.getAttr(a).isPresent()) {
target.stripeColorXX = set.getAttr(a).get().getIntegerValue();
}
String c = target.getContext().getString(33554437);
if (set.getAttr(c).isPresent()) {
target.stripeCount = set.getAttr(c).get().getIntegerValue();
}
}
protected boolean hasStyled(final T target) {
return this.lastStyledTargets.contains(target);
}
}
4.如何集成Barber库
4.1方式一
自行编译工程sample,生成api-debug.har,
将其添加到要集成的libs文件夹内,在sample的gradle内添加如下代码:
implementation fileTree(dir:'libs', include:['*.jar','*.har'])
4.2方式二
Barber库已经在maven发布,你可以使用如下依赖引用:
dependencies {
implementation ‘com.gitee.baijuncheng-open-source:barber:1.0.0’
}
5.下载链接
5.1GitHub源码链接:
https://github.com/hzsweers/barber