您当前的位置: 首页 >  android

蓝不蓝编程

暂无认证

  • 0浏览

    0关注

    706博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

使用 Android Support Annotations避免方法调用时传参错误

蓝不蓝编程 发布时间:2018-09-14 12:56:41 ,浏览量:0

背景:

     项目中有一个公用类,支持设置View的背景,第二个入参是颜色。

public static void setBackgroundColor(View view, int color) {
    view.setBackgroundColor(color);
}

    1. 初次使用时,使用了如下的传参方式,直接将color的资源id传入了,但是却发现显示出来的颜色不对。    

setBackgroundColor(button,R.color.color_3F51B5);

    上面代码对应的效果如右图按钮背景:

   2.  后来才发现传参错误,应该穿color值,而不是color资源ID。

setBackgroundColor(button,ContextCompat.getColor(context,R.color.color_3F51B5));

    预期效果如右图按钮背景:

思考:

    虽然找到了问题原因,但是这样的错误很容易犯,是否有更好避免此类问题的方法呢?

解决方案:

    1.引入annotations包依赖,如:compile "com.android.support:support-annotations:28.0.0"

implementation "com.android.support:support-annotations:28.0.0"

    2.可以对输入参数增加注解,供编译环节校验参数合法性。修改代码定义,对color参数增加@ColorInt注解:

public static void setBackgroundColor(View view,@ColorInt int color) {
        view.setBackgroundColor(color);
    }

继续思考:

   除了上面的注解,是否还有其他类似的注解?

全量注解介绍:

AnimatorRes 表示int类型的参数,成员变量,或方法返回值是一个animator资源的引用AnimRes表示int类型的参数,成员变量,或方法返回值是一个anim资源的引用AnyRes表示int类型的参数,成员变量,或方法返回值是一个任意资源类型的引用ArrayRes表示int类型的参数,成员变量,或方法返回值是一个array资源类型的引用AttrRes表示int类型的参数,成员变量,或方法返回值是一个attr资源的引用BoolRes表示int类型的参数,成员变量,或方法返回值是一个boolean资源的引用ColorRes表示int类型的参数,成员变量,或方法返回值是一个color资源的引用DimenRes表示int类型的参数,成员变量,或方法返回值是一个dimen资源的引用DrawableRes表示int类型的参数,成员变量,或方法返回值是一个drawable资源的引用(包括@mipmap)FractionRes表示int类型的参数,成员变量,或方法返回值是一个fraction资源的引用IdRes表示int类型的参数,成员变量,或方法返回值是一个id资源的引用IntegerRes表示int类型的参数,成员变量,或方法返回值是一个int类型资源的引用InterpolatorRes表示int类型的参数,成员变量,或方法返回值是一个interpolator资源的引用LayoutRes表示int类型的参数,成员变量,或方法返回值是一个layout资源的引用MenuRes表示int类型的参数,成员变量,或方法返回值是一个menu资源的引用PluralsRes表示int类型的参数,成员变量,或方法返回值是一个plurals资源的引用RawRes表示int类型的参数,成员变量,或方法返回值是一个raw资源的引用StringRes表示int类型的参数,成员变量,或方法返回值是一个string资源的引用StyleableRes表示int类型的参数,成员变量,或方法返回值是一个styleable资源的引用StyleRes表示int类型的参数,成员变量,或方法返回值是一个style资源的引用TransitionRes表示int类型的参数,成员变量,或方法返回值是一个transition资源的引用XmlRes表示int类型的参数,成员变量,或方法返回值是一个xml资源的引用ColorInt表示int颜色值IntRange表示参数需要在给定的int或long范围内FloatRange表示参数需要在给定的float范围内NonNull表示参数不能为nullNullable表示参数可以为nullDimension表示int类型的参数,成员变量,或方法的返回值是尺寸大小Px表示int类型的参数,成员变量,或方法的返回值是像素大小CallSuper只用在方法上,表示任何重写该方法的子类,也应该调用该方法CheckResult用来验证是否使用了方法返回值,可以通过添加注释来进行提示

安卓开发技术分享:https://blog.csdn.net/yinxing2008/article/details/84555061

 

关注
打赏
1639405877
查看更多评论
立即登录/注册

微信扫码登录

0.2494s