2013-06-04 40 views
2

我剛剛開始學習android編程,並對getResources()方法提出了疑問。 我注意到,當我創建一個資源對象的所有我需要做的就是:
Resources res = getResources();
第一個疑問是下面爲什麼我已經這樣做,我不能使用Java關鍵字?我不應該這樣做:
Resources res = new Resources();
第二個疑問如下:在我的文件的頂部我已經導入了Resources類。
import android.content.res.Resources;
現在我讀了android api,它說getResources()是一個公共抽象方法,如果它是抽象的類實現它?如果不聲明爲靜態,我怎麼能簡單地將它稱爲輸入getResources()?getResources()的實現Android

回答

3

您的活動擴展類android.app.Activity這又擴展類android.content.Context(在類層次上三級)。類Context聲明抽象方法getResources()這意味着您的活動子類繼承該方法,並且可以從您的onCreate()方法(例如)中調用它。

方法getResources()被聲明爲在Context類,但在類層次結構(android.view.ContextThemeWrapper)中間體類之一的抽象提供用於該方法的實現。

此外,這意味着創建Resources對象不是你的責任;它是由框架來完成的。

+0

嗨@devconsole。我看了一下ContextThemeWrapper.java源文件,並沒有找到getResources()方法的實現。只有調用'super.getResources()'的重載方法'getResources()'。你知道另一個實現'getResources()'的類嗎?謝謝。 – janzoner

+0

請參閱我的問題[這裏](http://stackoverflow.com/q/23933397/3343299)如果你有興趣請。 – janzoner

+0

@janzoner關鍵是'ContextThemeWrapper'提供'Activity'繼承的'getResources()'的實現。這回答了原來的問題。那麼我的回答有什麼問題? – devconsole

1

getResources實際上是一種您可以從Context中訪問的方法。所以,你真的可以認爲這是:

context.getResources() 

你的Activity類是在這種情況下你的背景,這就是爲什麼你可以用的語法調用它:

getResources() 

http://developer.android.com/reference/android/content/Context.html#getResources%28%29

從這些文檔:

有關應用程序環境的全局信息的接口。這個 是一個抽象類,其實現由Android 系統提供。它允許訪問特定應用的資源和 類,以及向上調用應用程序級的操作,如 開展活動,廣播和接收意圖等

+0

編輯時間太晚。無論如何,答案都是用這個答案更新的。感謝您的澄清! –