Android:隨筆——Android必須知道的註解Annotations

weixin_33850890發表於2017-04-08

轉載請標明地址 QuincySx: http://www.jianshu.com/p/95b8ae42289c

先講一下這是什麼 這個算是一種註解輔助的庫,在我們合作開發的時候進行一定的約束,我這樣說大家可能不太理解,大家繼續往下看自行理解一下
這個庫就在我們的 v7 包裡面,基本每個專案都會引入,可能只是大家沒用到而已 如圖

2427349-afe4134ce652ec16.png

今天我要寫的就是把這類裡面我自己比較常用的 一些註解 給大家分享一下


@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) {

}
2427349-f820cc6746c14e4c.png

警告不能為空

@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

相關文章