2014-07-12 32 views
27

Android Studio Beta(0.8)具有一個漂亮的新功能,它可以檢查某些int參數不是任意整數,而是具有一些屬性。Android Studio的「預期資源類型」檢查?

例如,調用是這樣的:

setContentView(R.id.textView1); 

將正確報告R.id.textView1不是佈局ID(該消息是「型佈局的預期資源」)。還有其他一些這樣的情況。

可以理解,只要將自己的方法添加到混合中,這種保護就會丟失,例如,

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

我可以用mySetContentView()與任何任意整數,它不會抱怨。

所以,我有兩個(相關)問題:

  1. 這是如何實現 - 是特殊的檢查,「烤」成皮棉?
  2. 是否有任何方法來註釋mySetContentView()方法,以便在調用無效值時也會報告資源類型錯誤?
+4

我敢肯定這是一個註釋 - 我想他們可能已經在開發工具介紹涉及本Google I | O。 – CommonsWare

+1

@CommonsWare你是對的!你想回答這個問題,還是我自己做? – matiash

+1

由於我不記得註釋,你最好回答它。 :-) – CommonsWare

回答

34

(感謝@CommonsWare的負責人)。

在您自己的代碼中有Java支持這些檢查的註釋。它們都可以在android.support.annotations包中找到:

  • IdRes
  • DrawableRes
  • LayoutRes
  • StringRes

在這種情況下,例如,我可以用:

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

和Android Studio將檢查提供的資源ID是否確實用於佈局。

此外,這些註釋是導出的,所以它們在設計庫時特別有用。

來源:

+0

謝謝! InputStream is = getResources()。openRawResource(getResourceID(R.drawable.greenbal)); .... private int getResourceID(@DrawableRes int resID){ return resID; } – oshliaer

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 
0

所有批註,您可以用android.support.annotation可以使用找到here

technical doc關於支持註釋。

8

嘗試這樣的回答:它的工作......把這段代碼到你的build.gradle

android { 
lintOptions { 
    disable "ResourceType" 
    } 
} 
+0

就像一個魅力) –

+1

我認爲這個問題恰恰相反:即使使用中間函數,他也希望進行這些檢查。 注意:禁用檢查通常是一個壞主意。 Android開發人員通常比我們聰明;) –