2017-06-20 109 views
0

我正在獲取像這樣的顏色,並且它對於我在崩潰報告中看到的一些設備返回0。他們都在res/values/colors.xml。防爆。 <color name="firstcolor">#A8A77A</color>colorString是動態的。Resources.NotFoundException僅在某些設備上

int primaryColor = ContextCompat.getColor(context, 
      context.getResources().getIdentifier(colorString.toLowerCase(), 
        context.getString(R.string.color), context.getPackageName())); 

我已經在這些設備上測試,它的工作原理: LG G5(7.0) - 諾基亞N1(5.1.1) - 摩托羅拉G(5.1) - 三星核心總理(4.4.4)

的崩潰報告是由這些: 三星王牌4(4.4.2) - 索尼的Xperia M5 E5603(6.0) - 吳羨(4.4.2)

Fatal Exception: android.content.res.Resources$NotFoundException: Resource ID #0x0 
    at android.content.res.Resources.getValue(Resources.java:1133) 
    at android.content.res.Resources.getColor(Resources.java:815) 
    at android.support.v4.content.ContextCompat.getColor(ContextCompat.java:434) 

任何方式找出原因它doe沒有爲這些設備的一些工作?

回答

0

原來的問題是toLowerCase()。對於某些語言環境,資本I正在轉換爲ı而不是i,導致無法通過標識符查找資源。

1

嘗試清除該項目,並看到

而且只需使用

ContextCompat.getColor(context,R.color.firstcolor) 
+0

不,我需要用id動態獲取它們。有許多顏色。 – ono

0

您可以使用這樣,你應該DEFTYPE中則getIdentifier 顏色

int resourceId = getResources().getIdentifier(colorString.toLowerCase(), "color", context.getPackageName()); 

int primaryColor = ContextCompat.getColor(resourceId); 
+0

我的'R.string.color'是「color」。所以這和你的一樣。 – ono

相關問題