资源NotFoundException使用colorAccent属性的getColor()

时间:2015-08-31 17:21:04

标签: android exception

为什么不能以编程方式解析此颜色:

style.xml的定义:

<style name="MyTheme.Light" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorAccent">#ff0000</item>
</style>

colors.xml的定义:

<color name="button_color">?attr/colorAccent</color>    

来源:

getResources().getColor(R.color.button_color);

引发以下异常:

android.content.res.Resources$NotFoundException: Resource ID #0x7f07001b type #0x2 is not valid
at android.content.res.Resources.getColor(Resources.java:752)
...

2 个答案:

答案 0 :(得分:2)

变化:

style.xml

的定义
<style name="MyTheme.Light" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorAccent">@color/button_color</item>
</style>

colors.xml的定义:

<color name="button_color">#ff0000</color>  

来源:

getResources().getColor(R.color.button_color);

答案 1 :(得分:0)

TypedValue typedValue = new TypedValue();
TypedArray typedArray = context.obtainStyledAttributes(typedValue.data, new int[] { android.R.attr.colorAccent });
int color = typedArray.getColor(0, 0);

这对我有用。您也许可以用颜色资源替换android.R.attr.colorAccent。