日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国内久久久久 | 久久久久久久久91 | 亚洲无线视频 | 亚洲成熟丰满熟妇高潮xxxxx | 在线观看无遮挡 | 爱情岛论坛永久入址测速 | 一级久久久久 | www.777奇米影视 | 国产精品白浆一区二小说 | 性少妇videosexfreexxx片 | av影院在线播放 | 黄色18网站 | 插久久 | 亚洲免费大全 | 国产色诱视频 | 密臀av| 可以免费看的av网站 | 欧美人与动物xxxx | 一区二区三区精品免费视频 | 亚洲操操| 免费日皮视频 | 超碰超碰| 91在线综合 | 亚洲免费区 | 四季av一区二区夜夜嗨 | 国产精品无码久久久久久电影 | 黄色一级视频在线观看 | 黄色录像a级片 | 爱爱的免费视频 | 扶她futa粗大做到怀孕 | 欧美性猛交xxxx乱 | 中文字幕成人在线观看 | wwww在线观看 | 成人黄色小视频在线观看 | 国模无码大尺度一区二区三区 | 亚洲AV无码乱码国产精品牛牛 | 四虎久久 | 国产aⅴ精品一区二区三区久久 | 日本一区二区在线免费 | 韩国美女一区二区 | 久久久久久久久久影院 | 丰满雪白极品少妇流白浆 | 欧美色88| 丰满少妇一区二区三区视频 | 九九久久久久 | 免费在线视频你懂的 | 免费无码毛片一区二区app | 亚洲精品你懂的 | 看全黄大色黄大片美女人 | 久久噜噜 | 伊人成年综合网 | 理论片午午伦夜理片影院99 | 久久99精品国产麻豆婷婷洗澡 | 天天摸日日干 | 国产91边播边对白在线 | 久久久久一级片 | 欧美日韩在线观看一区二区三区 | 国产精品一区二区三区免费视频 | 黄色va| 精品国产xxx | 成人福利午夜 | 快色在线 | 超碰人人搞 | 欧美日韩高清一区二区 国产亚洲免费看 | 国产卡一卡二 | 中文字幕在线观看日韩 | av国产精品 | 91精品国产闺蜜国产在线闺蜜 | 韩日成人| 黄色小网站入口 | av超碰在线观看 | 一道本av| 欧美日韩123区| 91精品专区 | 97超碰人人看 | 强辱丰满人妻hd中文字幕 | 国产男男gay| 国产成人啪精品 | 一本色道久久综合亚洲精品按摩 | 伊人久久久久噜噜噜亚洲熟女综合 | 一区二区在线免费观看视频 | 日韩区在线观看 | 国产精品77| 人人澡人人射 | 国产福利不卡 | 精品久久伊人 | 伊人精品综合 | 国产精品二区视频 | 成人黄色一级视频 | 国产免费视频 | 一级伦理片 | 精品人妻二区中文字幕 | 男女男精品视频网站 | 欧美日韩成人免费 | 国内自拍视频在线观看 | 亚洲第一天堂影院 | 青青草老司机 | 国产精品三区在线观看 | 成人av网站在线 |