轉載請標明地址 QuincySx: http://www.lxweimin.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