Android Studio的"预期资源类型"检查?

mat*_*ash 29 android lint typechecking android-studio

Android Studio Beta(0.8)有一个漂亮的新功能,它检查某些int参数不是任意整数,而是具有一些属性.

例如,调用类似于:

setContentView(R.id.textView1);
Run Code Online (Sandbox Code Playgroud)

将正确报告R.id.textView1不是布局ID(消息是"类型布局的预期资源").还有其他案例.

可以理解的是,只要您将自己的方法添加到组合中,这种保护就会丢失,例如

private void mySetContentView(int resourceId) {
    setContentView(resourceId);
}
Run Code Online (Sandbox Code Playgroud)

然后我可以调用mySetContentView()任意整数,它不会抱怨.

所以,我有两个(相关的)问题:

  1. 这是如何实现的 - 将特殊检查"烘焙"成棉绒?
  2. 是否有任何方法可以注释该mySetContentView()方法,以便在使用无效值调用它时也会报告资源类型错误?

mat*_*ash 36

(感谢@CommonsWare的提醒).

Java注释可以在您自己的代码中支持这些检查.它们都可以在android.support.annotations包装中找到:

  • IdRes
  • DrawableRes
  • LayoutRes
  • StringRes
  • &C

在这种情况下,例如,我可以使用:

private void mySetContentView(@LayoutRes int resourceId) {
    setContentView(resourceId);
}
Run Code Online (Sandbox Code Playgroud)

Android Studio将检查提供的资源ID是否确实用于布局.

而且,这些注释被导出,因此在设计库时它们特别有用.

资料来源:


Kit*_*fer 20

这些都是注释:

@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
Run Code Online (Sandbox Code Playgroud)


Mah*_*ndy 8

试试这个答案:它正在工作......把这段代码放到你的build.gradle中

android {
 lintOptions {
    disable "ResourceType"
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为问题恰恰相反:即使使用了中间函数,他也希望进行检查.注意:禁用检查通常是个坏主意.Android开发人员通常比我们聪明;) (2认同)