2015-01-06 55 views
53

我已經在我的項目中使用context.getDrawable()這樣的:Android的:替代的context.getDrawable()

Drawable greenProgressbar = context.getDrawable(R.drawable.custom_progressbargreen); 

但它需要一個Minimum API level of 21 Eclipse是給我的錯誤。這意味着在谷歌搜索後,我的APP只能在Android 5.0上使用。由於不是所有的設備都使用這個版本的Android,我想有一個替代context.getDrawable()

回答

144

根據SDK 22文檔的先前被接受的方法已被棄用,:

之前android.os.Build.VERSION_CODES#JELLY_BEAN,該功能將無法正確檢索最終配置密度當資源這裏傳遞的ID是另一個可繪製資源的別名。這意味着如果別名資源的密度配置與實際資源不同,則返回的Drawable的密度將不正確,從而導致縮放不良。

正如this answer更好的解決方案指出,將使用ContextCompatContextCompat.getDrawable(context, R.drawable.***)

+1

這是正確的 –

+0

我現在接受這個答案,因爲它更相關:) – Bram

6

我以前有類似的問題。你有沒有試過這樣做?

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen); 
17

嘗試添加上下文後getResources(),所以這樣的:

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen); 

應該工作。

+3

Resources.getDrawable是贊成Context.getDrawable –

+5

的棄用請確定您閱讀評論前的問題。 OP明確指出我們使用的是Context.getDrawable(),但它僅在API級別> = 21時可用。 謝謝,祝你有美好的一天:) – flyingtoaster0

6

我有,我想引用現在已不建議getDrawable()方法同樣的情況。

我用什麼,

myButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_btn_off)); 

希望這將幫助你

-1

試試這個:

AppCompatResources.getDrawable(context, R.drawable.*)