Android Studio's “expected resource of type” checks?

廉价感情. 提交于 2019-11-27 04:20:54

问题


Android Studio Beta (0.8) has a nifty new feature where it checks that some int parameters are not arbitrary integers, but rather have some properties.

For example, calling something like:

setContentView(R.id.textView1);

will correctly report that R.id.textView1 is not a layout id (the message is "expected resource of type layout"). There are other cases of this peppered around.

Understandably, this protection is lost as soon as you add your own methods into the mix, e.g.

private void mySetContentView(int resourceId) {
    setContentView(resourceId);
}

I can then call mySetContentView() with any arbitrary integer and it will not complain.

So, I have two (related) questions:

  1. How is this achieved -- are the special checks "baked" into lint?
  2. Is there any way to annotate the mySetContentView() method so that it will also report a resource type error when calling it with an invalid value?

回答1:


(Thanks to @CommonsWare for the heads up).

There are Java annotations to support these checks in your own code. They can all be found in the android.support.annotations package:

  • IdRes
  • DrawableRes
  • LayoutRes
  • StringRes
  • &c

In this case, for example, I could use:

private void mySetContentView(@LayoutRes int resourceId) {
    setContentView(resourceId);
}

and Android Studio will check that the provided resource id is indeed for a layout.

Moreover, these annotations are exported, so they can be especially useful when designing a library.

Sources:

  • Video from Google I/O 2014: What's new in Android development tools



回答2:


This are all Annotations:

@AnimatorRes
@AnimRes
@AnyRes
@ArrayRes
@AttrRes
@BoolRes
@ColorRes
@DimenRes
@DrawableRes
@FractionRes
@IdRes
@IntDef
@IntegerRes
@InterpolatorRes
@LayoutRes
@MenuRes
@NonNull
@Nullable
@PluralsRes
@RawRes
@StringDef
@StringRes
@StyleableRes
@StyleRes
@XmlRes



回答3:


Try this answer: Its working... Put this code into your build.gradle

android {
 lintOptions {
    disable "ResourceType"
  }
}



回答4:


All annotations, that you can use with android.support.annotation you can find here.

And technical doc about supporting annotations.



来源:https://stackoverflow.com/questions/24716385/android-studios-expected-resource-of-type-checks

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!