2017-09-20 72 views
0

我的應用程序在API 23及更高版本中運行良好,但是在API 21中運行它時似乎存在一個錯誤。我將其縮小到這段代碼:比較API 21中的資源x API 23

if (myButton.getBackground().getConstantState() == ResourcesCompat.getDrawable(getResources(), R.drawable.myDrawable, null).getConstantState()) 
{...} 

在API 21它始終返回false(即使它不應該),所以我想這些方法之一不API 21

任何工作思路?是否有其他方式(兼容API 21及以上版本)檢查按鈕的背景是否具有指定的特定可繪製對象?

ps:我的minsdk是21,但是lint沒有給我任何警告。

回答

1

您可以嘗試使用ContextCompat:

ContextCompat.getDrawable(yourContext, R.drawable.myDrawable).getConstantState(); 
+0

它的工作。你有什麼想法,爲什麼?謝謝您的幫助! –

+0

我無法確定ResourceCompat出現問題,因爲它來自https://developer.android.com/reference/android/support/v4/content/res/ResourcesCompat.html#getDrawable(android.content.res。資源,int,android.content.res.Resources.Theme)使用null將與'getDrawable(resource)'相同。但是當我們使用'ResourcesCompat.getDrawable(getResources(),R.drawable.myDrawable,null).getConstantState()'Android Studio會抱怨它可以返回null。因此問題出現了。 –