Android の各種リソースの ID は int 型で管理されています。 この値を変数に格納したり、メソッドのパラメータとして受け取るように実装した場合、不正な int 値が渡されて実行時に落ちてしまうリスクがあります。
このようなことをできるだけ防ぐため、Android Support ライブラリには下記のようなアノテーションが用意されており、これらを付加した int 型変数には、指定した種類のリソースの ID しか格納できなくなります(AndroidStudio で警告が表示されるようになります)。
アノテーション | リソース ID の種類 |
---|---|
@AnimatorRes | R.animator.xxx で参照するリソース ID |
@AnimRes | R.anim.xxx で参照するリソース ID |
@AnyRes | いずれかの種類のリソースの ID(他の具体的なアノテーションを使用することを推奨) |
@ArrayRes | R.array.xxx で参照するリソース ID |
@AttrRes | R.attr.xxx で参照するリソース ID |
@ColorRes | R.color.xxx で参照するリソース ID |
@DimenRes | R.dimen.xxx で参照するリソース ID |
@DrawableRes | R.drawable.xxx で参照するリソース ID |
@FontRes | R.font.xxx で参照するリソース ID |
@IdRes | R.id.xxx で参照するリソース ID |
@IntegerRes | R.interger.xxx で参照するリソース ID |
@InterpolatorRes | R.interpolator.xxx で参照するリソース ID |
@LayoutRes | R.layout.xxx で参照するリソース ID |
@NavigationRes | R.navigation.xxx で参照するリソース ID |
@RawRes | R.raw.xxx で参照するリソース ID |
@StringRes | R.string.xxx で参照するリソース ID |
@StyleableRes | R.styleable.xxx で参照するリソース ID |
@StyleRes | R.style.xxx で参照するリソース ID |
@TransitionRes | R.transition.xxx で参照するリソース ID |
上記のようなアノテーションは Annotation Support Library で提供されているため、build.gradle
に下記のような依存を追加しておく必要があります(参考: 本家ドキュメント)。
com.android.support:support-annotations:24.2.0
下記は、color 値のリソース ID のみを格納できる int 型フィールドを定義する例です。
@ColorRes
private int mainColorResId = R.color.white;
メソッドのパラメータにもアノテーションを付けることができます。 下記のように指定された int 型パラメータには、文字列リソースを示す ID しか渡せなくなります。
public class ResourceResolver {
...
public String getString(@StringRes int resId) {
return context.getString(resId);
}
}
android.support.annotation パッケージ には他にもいろいろなアノテーションが定義されているので、ざっと見ておくとよいでしょう。
例えば、int 型用のアノテーションとしては、上記のようなリソース ID 関連のものだけではなく、AARRGGBB
形式のカラー値であることを示すアノテーションが定義されていたりします。
AARRGGBB
形式の int 値