美文网首页高级Android知识Android开发
Android:随笔——Android必须知道的注解Annota

Android:随笔——Android必须知道的注解Annota

作者: QuincySx | 来源:发表于2017-04-08 14:51 被阅读732次

    转载请标明地址 QuincySx: http://www.jianshu.com/p/95b8ae42289c

    先讲一下这是什么 这个算是一种注解辅助的库,在我们合作开发的时候进行一定的约束,我这样说大家可能不太理解,大家继续往下看自行理解一下
    这个库就在我们的 v7 包里面,基本每个项目都会引入,可能只是大家没用到而已 如图

    今天我要写的就是把这类里面我自己比较常用的 一些注解 给大家分享一下


    @NonNull

    首先看一下 @NonNull 注解他的意思是参数不能为空的意思

    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            hello("sss"); //正常调用没有问题
    
            hello(null); //当这样写的写的时候编译器报了个警告
    }
    
    //一个普通的方法
    public void hello(@NonNull String s) {
    
    }
    

    警告不能为空

    @UiThread

    这个注解的意思是该方法在主线程下运行

     @UiThread
        public void hello1() {
    
        }
    

    资源文件类的注解

    然后下面这些一块说
    @AnimatorRes @ColorRes @DimenRes @DrawableRes @LayoutRes 等等 像这样以 Res 结尾的 注解表示这些参数 只能是资源文件 下面用 @ColorRes 举个例子

     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            setColor(12);  //报错 Expected resource of type color
            
            setColor(R.color.colorPrimary);  //不报错没有问题
        }
    
        //只允许设置资源里面的颜色
        public void setColor(@ColorRes int color) {
    
        }
    

    其他的与上面用法基本相同,因为参数都是 Int 类型的,传的时候可能会有些困扰,这个库就可以解决这些问题

    @IntDef

    光有 Android 自带的 Int 类型过滤,这个注解可以进行自定义 示例:

    public final static int LOADING = 10;
    public final static int SUCCESS = 11;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            setStatus(LOADING);  //没有问题
            
            // 以下这两种方式都会显示错误
            setStatus(10); 
            setStatus(1); 
    }
    
    @IntDef({LOADING , SUCCESS })
    public @interface TestStatus{
    }
    
    //只允许设置资源里面的颜色
    public void setStatus(@TestStatus int status) {
    
    }
    

    其他补充

    下面再说一点题外话 对于Android的颜色 我也是看到 @ColorRes @ColorInt 这两个注解,才研究了一下,之前对于设置背景的 Color 参数 都是 Int 类型,为什么有的需要 getResources() 去取,有的则不需要,下面看源码

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            setColorInt(Color.BLUE);  //直接传 Java 里面的颜色
    
            setColorInt(Color.parseColor("#cccccc"));  //把 HTML 样式的颜色转换过来使用
    
            setColorInt(0XFFCCCCCC);  // 这种方式要简单说一下了 前两位 0X 是固定的,小写也没有关系,然后是后面两位 FF 这是表示颜色透明度,后面 6 位代表颜色值,他与上面的写法效果是一样的
    
            setColor(R.color.colorPrimary);  //使用资源文件里面的颜色
    }
    
    public void setColor(@ColorRes int color) {
            //用资源文件里面的颜色需要对颜色进行转换一下,在对控件进行使用
            mTextView.setBackgroundColor(getResources().getColor(color));
    }
    
    public void setColorInt(@ColorInt int color) {
            //对颜色的值可以直接进行使用
            mTextView.setBackgroundColor(color);
    }
    

    总结

    很简单的知识点,但是使用频率还是很高的
    本人技术水平有限,如有错误还请指出

    本文已在版权印备案,如需转载请访问版权印。29666966

    相关文章

      网友评论

        本文标题:Android:随笔——Android必须知道的注解Annota

        本文链接:https://www.haomeiwen.com/subject/wbvlattx.html