我的目标是能够注释基于 TextView 的类,这样我就可以在它们上注入自定义字体,而无需搜索我的整个(和巨大的)代码库。因为我有一个 AspectJ Android 项目,所以它对 AOP 来说似乎是一份不错的工作。
我首先定义了以下注释:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InsertFontTypeFace
{
String typeFacenamePathInAssets() default "";
}
在我的活动中,我有这样的事情:
@InsertFontTypeFace(typeFacenamePathInAssets="fonts/myCustomFont.ttf")
private Button myButton;
最后,就我而言,我有:
pointcut textViewBasedWidgetInitialization(TextView thisObject, InsertFontTypeFace annotation): initialization(TextView+.new(..)) && @annotation(annotation) && target(thisObject);
after(TextView thisObject, InsertFontTypeFace annotation) : textViewBasedWidgetInitialization(thisObject, annotation)
{
String pathToFont = annotation.typeFacenamePathInAssets();
if(! EMPTY_STRING.equals(pathToFont))
{
Typeface myTypeface = Typeface.createFromAsset(thisObject.getContext().getAssets(), pathToFont);
thisObject.setTypeface(myTypeface);
}
}
我还尝试使用以下切入点来捕获字段设置:
pointcut textViewBasedWidgetInitialization(TextView thisObject, InsertFontTypeFace annotation): set(TextView+ *.*) && @annotation(annotation) && target(thisObject);
这两个选项都会在 Eclipse 中产生“未应用在 XXX 中定义的建议”警告。
任何人都可以对此有所了解吗?
提前致谢。