天天看點

Support Annotation Library注解使用詳解

一.Support Annotation Library能做什麼

Support Annotation Library包含一系列的元注解,能夠幫助開發者在編譯期間發現可能存在的Bug,另外Android Studio本身就支援Annotation Library是以開發者無需再次添加依賴。

二.常用注解詳解

1.@NonNull與@Nullable注解

@NonNull:表示參數或者傳回值不能為空。

@Nullable:表示參數或者傳回值可以為空。

建立一個測試方法給參數加上@NonNull并且傳參為null,這時方法會報警告,并且用Android Lint進行檢查也會顯示警告。

Support Annotation Library注解使用詳解

image

當切換成@Nullable注解時警告則會消失

Support Annotation Library注解使用詳解

2.資源類型的注解

AnimatorRes:标記資源類型為android.R.animator類型

AnimRes:标記資源類型為android.R.anim類型

AnyRes:标記為任何一種資源類型

ArrayRes:标記資源類型為android.R.array類型

AttrRes:标記資源類型為android.R.attr類型

BoolRes:标記資源類型為布爾類型

ColorRes:标記資源類型是android.R.color類型

DrawableRes:标記資源類型為android.R.drawable類型

FractionRes:表示資源類型為fraction類型,這個比較少見,常見于Animation.xml中,比如50%p,表示占parent的50%。

IdRes:表示資源類型為android.R.id類型

IntegerRes:表示資源類型為android.R.integer類型

InterpolatorRes:表示資源類型為android.R.interpolator類型

LayoutRes:表示資源類型為android.R.layout類型

MenuRes:表示資源類型為androdi.R.menu類型

RawRes:表示資源類型為android.R.raw類型

StringRes:表示資源類型為android.R.string類型

StyleableRes:表示資源類型為android.R.styleable

StyleRes:表示資源類型為android.R.style類型

TransitionRes:表示資源類型為transition類型

XmlRes:表示資源類型為android.R.xml類型

資源型注解主要是防止因填寫錯誤的資源類型而産生的錯誤,舉個栗子:我們建立一個方法,在參數前加上@StringRes注解,然後調用的時候傳入color類型,這時Android Studio會報錯。

Support Annotation Library注解使用詳解

3.顔色類型的注解

顔色注解一共有兩個,資源類型使用@ColorRes,在RGB或ARGB值則使用@ColorInt

Support Annotation Library注解使用詳解

4.取值範圍注解

●@Size:可以限制數組集合或者字元串的大小,例如:

@Size(min=3):可以表示字元串的最小字元數為3

@Size(max=23):可以表示集合的元素個數最大為23

@Size(2):可以表示數組的元素個數為2

@Size(multiple=2):可以表示數組的大小是2的倍數

●@IntRange:參數類型是int或lang,用法如下

private void test7(@IntRange(from = 0,to = 255)int alpha){
    
}
           

●FloatRange:參數類型是float或者double,用法如下

private void test8(@FloatRange(from = 0,to = 1)float alpha){

}
           

5.權限注解

Android應用在使用某些系統功能時,需要在AndroidManifest.xml中聲名權限,否則在運作的時候可能會因為缺失對應的權限而發生錯誤,是以為了在編譯期間及時發現缺失的權限,我們可以使用@RequiresPermission。

聲明一個權限

@RequiresPermission(Manifest.permission.INTERNET)
private void test8(){

}
           

聲明最少一個權限

@RequiresPermission(anyOf = {Manifest.permission.INTERNET,Manifest.permission.WRITE_EXTERNAL_STORAGE})
private void test8(){

}
           

聲明多個權限

@RequiresPermission(allOf = {Manifest.permission.INTERNET,Manifest.permission.WRITE_EXTERNAL_STORAGE})
private void test8(){

}
           

對于Intent調用所需權限,可在Action字元串定義處添加注解

Support Annotation Library注解使用詳解

6.重寫函數注解(要求必須調用父類的方法)

建立一個類MyTest,并建立方法test然後加上@CallSuper注解

public class MyTest {
    @CallSuper
    protected void test(){

    }
}
           

建立一個類MyTest2繼承MyTest,重寫test方法

public class MyTest2 extends MyTest {
    @Override
    protected void test() {
        super.test();
    }
}
           

如果将super.test()去掉則會報錯。

Support Annotation Library注解使用詳解

7.@VisibleForTesting

單元測試中可能要通路到一些不可見的類、函數或者變量,這時可以使用@VisibleForTesting注解來對其可見

8.@Keep

@Keep注解用來标記在Proguard混淆過程中不需要混淆的類或者方法。

@Keep
public class MyTest {
    @CallSuper
    protected void test(){

    }
}
           

個人部落格: https://myml666.github.io

繼續閱讀