有些時候需要将res中的資源檔案加載進來然後做一些修改,然後再指派給控件使用,比如這樣:
現在我需要把資源檔案id所對應的Drawable對象加載進來,然後做向下轉型處理,如果我不調試檢視本身的類型的話,該怎麼知道它到底是哪種類型呢?我們來通過源代碼檢視究竟:
首先我們找到getResources().getDrawable()方法:
這個方法并沒有做什麼,進入到loadDrawable方法中:
這一大段我們看主要的:
這裡以selector說明,selector是定義在xml中的,我們就找到這個地方,它原來是使用XmlResourceParser來對xml資源檔案進行解析的,咱們進去createFromXml方法内部一探究竟:
從這段代碼中我們可以發現,最主要的工作是由方法createFromXmlInner來完成的,我們進去看看:
噢噢,原來是這樣啊,我定義什麼樣類型的圖檔,最後就有什麼樣的Java類型與之對應,原來我的selector對應StateListDrawable,恍然大悟,接下來就容易處理了。