解释从ContextCompat类中使用getColor()方法的主要原因?

And*_*tib 0 android converter getcolor

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linear);
int color = ContextCompat.getColor(getContext(), mColorResourceId);
linearLayout.setBackgroundColor(color);
Run Code Online (Sandbox Code Playgroud)

我有这些代码: mColorResourceId它是hold R.color.category_numbers- >mColorResourceId = R.color.category_numbers

当我mColorResourceId直接传递给setBackgroundColor(mColorResourceId);它时,尽管方法接受int值,但它不会改变颜色.

我的问题为什么我需要这个额外的步骤int color = ContextCompat.getColor(getContext(), mColorResourceId);来改变颜色?

Ted*_*opp 5

setBackgroundColor()方法接受一个int应该是aarrggbb格式的颜色值.资源ID R.color.category_numbers也是一个int,但它不是颜色值; 相反,它是color资源的标识符.调用ContextCompat.getColor(getContext(), mColorResourceId)检索对应的实际颜色值mColorResourceId.

Android做这种间接的部分原因是提供灵活性.返回的实际颜色可能取决于当前主题或设备配置,并且可能在运行时实际更改(取决于您声明颜色资源的方式).