日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 常用注解,Android 开发小工具之:注解 Annotation

發布時間:2025/3/8 Android 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 常用注解,Android 开发小工具之:注解 Annotation 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android Support 包之一的 support-annotations是通過靜態編譯檢測來提高代碼質量的一個注解工具。里面包含了 Android 開發中常用的代碼檢測注解,幫助開發者提高代碼質量。通過 SDK Manager下載 Android Support Repository 后,在 Gradle 中通過如下聲明來使用該注解包:

dependencies {

compile ‘com.android.support:support-annotations:22.2.0’

}

該工具包含如下幾種類型的代碼檢測:

檢測參數或者返回值是否可以為 null

@Nullable 和 @NonNull 會分別檢測一個變量、參數或者函數返回值是否為 null。如果一個函數的參數用 @NonNull 注解,當調用該函數指定該參數為 null 的時候,代碼檢測工具(Lint)會告訴你一個警告,該參數不能為 null。而 @Nullable 則表示可以為 null。例如 如下的代碼表示 onCreateView 函數的返回值不為 null, 參數 context 和 attrs 也不能為 null:

import android.support.annotation.NonNull;

/** Add support for inflating the tag. */

@NonNull

@Override

public View onCreateView(String name, @NonNull Context context,

@NonNull AttributeSet attrs) {

}

資源類型注解

Android 開發中經常使用各種資源常量 R.XXX 來引用各種資源。例如 圖片資源和字符串資源。這些常量都是 int 類型的,在代碼檢測的時候沒法判斷引用的資源是否有錯誤,比如本來需要一個字符串資源,結果在代碼寫的時候用了一個顏色資源,這種情況只有通過測試才能發現,有些極端情況可能測試也不容易發現。資源類型注解就是為了解決該問題的,資源注解包含如下幾種:

@AnimatorRes 表明該參數、變量或者函數返回值應該是一個 Animator 類型的資源

@AnimRes 表明該參數、變量或者函數返回值應該是一個 Anim 類型的資源

@AnyRes 表明該參數、變量或者函數返回值應該是一個任意類型的資源

@ArrayRes 表明該參數、變量或者函數返回值應該是一個 Array 類型的資源

@AttrRes 表明該參數、變量或者函數返回值應該是一個 attribute 類型的資源

@BoolRes 表明該參數、變量或者函數返回值應該是一個布爾類型的資源

@ColorInt 表明該參數、變量或者函數返回值應該是一個顏色值而不是顏色資源引用,例如應該是一個 AARRGGBB 的整數值。

@ColorRes 表明該參數、變量或者函數返回值應該是一個 color 類型的資源,而不是顏色值。注意和 ColorInt 區別

@DimenRes 表明該參數、變量或者函數返回值應該是一個 dimension 類型的資源

@DrawableRes 表明該參數、變量或者函數返回值應該是一個 drawable 類型的資源

@FractionRes 表明該參數、變量或者函數返回值應該是一個 fraction 類型的資源

@IdRes 表明該參數、變量或者函數返回值應該是一個資源的 ID 類型

@IntegerRes 表明該參數、變量或者函數返回值應該是一個整數類型的資源

@InterpolatorRes 表明該參數、變量或者函數返回值應該是一個 interpolator 類型的資源

@LayoutRes 表明該參數、變量或者函數返回值應該是一個 layout 布局文件類型的資源

@MenuRes 表明該參數、變量或者函數返回值應該是一個 menu 類型的資源

@PluralsRes 表明該參數、變量或者函數返回值應該是一個 plurals 類型的資源

@RawRes 表明該參數、變量或者函數返回值應該是一個 raw 類型的資源

@StringRes 表明該參數、變量或者函數返回值應該是一個字符串類型的資源

@StyleableRes 表明該參數、變量或者函數返回值應該是一個 styleable 類型的資源

@StyleRes 表明該參數、變量或者函數返回值應該是一個 style 類型的資源

@TransitionRes 表明該參數、變量或者函數返回值應該是一個 transition 類型的資源

@XmlRes 表明該參數、變量或者函數返回值應該是一個 XML 類型的資源

例如下面的函數在調用的時候,如果用非字符串類型的 R 常量則會給出警告:

import android.support.annotation.StringRes;

public abstract void setTitle(@StringRes int resId);

線程注解類型

線程注解用來檢測一個函數是否在指定類型的線程中執行。 有四個:@UiThread @MainThread @WorkerThread @BinderThread

注意: 其中 @UiThread 和 @MainThread 是可替換用的, 大部分應用中,這兩個是一樣的。

如果一個類中的所有函數都在同一個線程內執行,可以在 類名稱上面用這個注解即可。

權限注解類型

@RequiresPermission 用來表明該函數執行需要一個或者多個權限,如果你沒有聲明這些權限,則會給出警告。例如:

@RequiresPermission(Manifest.permission.SET_WALLPAPER)

public abstract void setWallpaper(Bitmap bitmap) throws IOException;

@RequiresPermission(allOf = {

Manifest.permission.READ_HISTORY_BOOKMARKS,

Manifest.permission.WRITE_HISTORY_BOOKMARKS})

public static final void updateVisitedHistory(ContentResolver cr, String url, boolean real) {

}

@RequiresPermission(anyOf = {

Manifest.permission.READ_HISTORY_BOOKMARKS,

Manifest.permission.WRITE_HISTORY_BOOKMARKS})

public static final void updateHistory(ContentResolver cr, String url, boolean real) {

}

如果只要滿足多個權限中的一個,用 anyOf; 如果要滿足多個權限,用 allOf.

返回值是否使用檢測注解

@CheckResults 用來檢測函數的返回值是否被使用了,如果沒有使用則說明可能不應該調用這個函數,可以給出建議使用哪個函數。例如,新的 Android SDK 中就在 checkPermission 函數中使用如下注解:

@CheckResult(suggest=”#enforcePermission(String,int,int,String)”)

public abstract int checkPermission(@NonNull String permission, int pid, int uid);

如果你調用了 checkPermission 函數,但是并沒有使用其返回值,則很有可能你是想申請一個權限而不是檢查是否有這個權限,所以 suggest 參數建議你使用 enforcePermission 函數來申請權限。如果你確實想檢查是否有這個權限,則通常你會判斷 checkPermission 的返回值來確定是否有這個權限。

確保調用 super 函數的注解

@CallSuper 來表明重寫這個函數需要調用 super 父函數。如果你忘記了調用,則會提醒你。比如 Activity 的onCreate 函數需要代用 super.onCreate().

數值常量注解

@IntRange 是用來表明整數型參數的取值范圍的,比如 下面的 setAlpha 函數的參數 alpha 的取值范圍應該為 0 到 255,其他值都是非法的;

public void setAlpha(@IntRange(from=0,to=255) int alpha) { … }

@FloatRange 同樣是表明浮點數范圍的,例如:

public void setAlpha(@FloatRange(from=0.0, to=1.0) float alpha) {…}

而 @Size 是用來表明數組類型參數的長度的,可以用 @Size(min=1) 來指定數組的最小長度,@Size(2) 則表明該數組參數必須是2. 例如:、

int[] location = new int[3];

button.getLocationOnScreen(@Size(min=1) location);

創建枚舉類型注解

如果一個參數、變量的取值是幾個常量中的一個,則可以用 @IntDef 和 @StringDef 注解來自定義一個常量枚舉類型注解。使用方式如下所示:

import android.support.annotation.IntDef;

public abstract class ActionBar {

//定義所接受的常量值

@IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})

//告訴編譯器該注解不會在 .class 文件中存在

@Retention(RetentionPolicy.SOURCE)

//定義 NavigationMode 注解

public @interface NavigationMode {}

//Declare the constants

public static final int NAVIGATION_MODE_STANDARD = 0;

public static final int NAVIGATION_MODE_LIST = 1;

public static final int NAVIGATION_MODE_TABS = 2;

//Decorate the target methods with the annotation

@NavigationMode

public abstract int getNavigationMode();

//Attach the annotation

public abstract void setNavigationMode(@NavigationMode int mode);

上面的 @NavigationMode 注解使用了 @IntDef 來定義該注解所限定了一些常量值。 當你用 @NavigationMode 注解時,則說明這個參數或者函數返回值需要是 @IntDef 中定義的常量值其一 (NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, 或者 NAVIGATION_MODE_TABS).

除了定義具體的常量值以外,還可以通過 flag 參數來指定一個模式,例如下面的 DisplayOptions 注解定義該類型必須滿足依 DISPLAY_ 開頭的一個模式。

import android.support.annotation.IntDef;

@IntDef(flag=true, value={

DISPLAY_USE_LOGO,

DISPLAY_SHOW_HOME,

DISPLAY_HOME_AS_UP,

DISPLAY_SHOW_TITLE,

DISPLAY_SHOW_CUSTOM

})

@Retention(RetentionPolicy.SOURCE)

public @interface DisplayOptions {}

總結

以上是生活随笔為你收集整理的android 常用注解,Android 开发小工具之:注解 Annotation的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 97在线免费观看视频 | 亚洲色图40p | 国产精品久久久久久免费播放 | 国产专区一区 | aaa一区二区三区 | 毛片在线免费 | 日韩网站在线播放 | 成人影片网址 | 97精品人妻一区二区三区蜜桃 | 国产中文 | 亚洲免费影院 | 伦理av在线 | 精品国产一区二区三区在线观看 | 91视频亚洲 | 午夜av免费观看 | 中日韩精品视频在线观看 | 亚洲av成人精品午夜一区二区 | 国产精品福利在线观看 | 边啃奶头边躁狠狠躁 | 伊人色综合久久久 | 最新中文字幕av | 女同性αv亚洲女同志 | 亚洲精品成人片在线观看精品字幕 | 亚洲免费av在线 | 人人97| 一本色道久久综合 | 琪琪色视频| 欧美黄色大片视频 | 国产嫩草在线观看 | 波多野结衣视频网址 | 喷水av | 高清一区二区视频 | 露出调教羞耻91九色 | 超碰97人| 中文字幕第8页 | 99精品久久久久久久婷婷 | 色撸撸av | 野外吮她的花蒂高h在线观看 | 午夜片在线观看 | 综合久久精品 | 用我的手指扰乱你 | 午夜免费播放观看在线视频 | 午夜av一区 | 国产高清在线观看视频 | 色图自拍 | 一级性生活免费视频 | 操碰91| 一区二区免费在线观看 | 99er这里只有精品 | 国产一级片免费看 | 亚洲视频 欧美视频 | 91精品综合久久久久久五月天 | 午夜激情网 | 欧亚毛片 | jizz中文字幕 | 亚洲三级视频 | 亚洲午夜国产 | 久色视频在线 | 99久久人妻无码精品系列 | 久久92| 3d动漫精品啪啪一区二区下载 | 日本成人在线网站 | 日韩在线视频精品 | 操穴网站 | 99热在线只有精品 | 一本大道东京热无码 | 超碰在线97观看 | 亚洲天堂网视频 | www.色在线观看 | 亚洲性视频网站 | 在线观看免费视频 | 国产高清不卡 | 欧美精品一二 | 精品无码国产一区二区三区av | 夜色网| 噼里啪啦免费看 | 全黄一级片| 免费吸乳羞羞网站视频 | 成片免费观看视频 | 亚洲第一av| 亚洲精品国产手机 | 色很久 | 免费在线看黄的网站 | 日日夜夜爱爱 | 日日夜夜操操操 | 久免费一级suv好看的国产 | 日韩伦理av | 欧美黄色a级 | 久久久久色 | 青青草精品在线视频 | 国产99在线视频 | 欧美成人区 | 久久久www免费人成人片 | 黄色片亚洲 | 日本免费观看视频 | 热99这里只有精品 | 四季av国产一区二区三区 | 黄色激情网址 | 日韩网站在线播放 |