【问题标题】:Android Studio's "expected resource of type" checks?Android Studio 的“预期资源类型”检查?
【发布时间】:2014-07-12 19:09:49
【问题描述】:

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

例如,调用类似:

setContentView(R.id.textView1);

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

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

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

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

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

  1. 这是如何实现的 - 特殊检查是否“烘焙”到 lint 中?
  2. 有什么方法可以对mySetContentView()方法进行注解,这样在调用无效值时也会报资源类型错误?

【问题讨论】:

  • 我很确定这是一个注释——我想他们可能已经在 Google I|O 的开发者工具演示中介绍了这一点。
  • @CommonsWare 你是对的!你要回答这个问题,还是我自己回答?
  • 因为我不记得注释了,你最好回答一下。 :-)
  • @CommonsWare 完成,谢谢!

标签: android android-studio lint typechecking


【解决方案1】:

(感谢@CommonsWare 的提醒)。

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

  • IdRes
  • DrawableRes
  • LayoutRes
  • StringRes
  • &c

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

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

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

此外,这些注释是导出的,因此它们在设计库时特别有用。

来源:

【讨论】:

  • 谢谢!同样的例外... InputStream is = getResources().openRawResource(getResourceID(R.drawable.greenbal)); .... private int getResourceID(@DrawableRes int resID) { return resID; }
【解决方案2】:

这都是注解:

@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】:

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

    android {
     lintOptions {
        disable "ResourceType"
      }
    }
    

    【讨论】:

    • 我认为问题恰恰相反:即使使用了中间函数,他也希望进行这些检查。当心:禁用检查通常是个坏主意。 Android 开发人员通常比我们聪明;)
    【解决方案4】:

    所有可与android.support.annotation 一起使用的注释,您可以找到here

    还有technical doc 关于支持注释。

    【讨论】:

      猜你喜欢
      • 2015-06-24
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多