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

时间:2016-11-09 21:32:20

标签: android converter getcolor

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linear);
int color = ContextCompat.getColor(getContext(), mColorResourceId);
linearLayout.setBackgroundColor(color);

我有这些代码: mColorResourceId暂挂R.color.category_numbers - > mColorResourceId = R.color.category_numbers

当我将mColorResourceId直接传递给setBackgroundColor(mColorResourceId);时,尽管方法接受int值,但它并没有改变颜色。

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

1 个答案:

答案 0 :(得分:5)

setBackgroundColor()方法接受int,该aarrggbb应该是R.color.category_numbers格式的颜色值。资源ID int也是color,但它不是颜色值;相反,它是ContextCompat.getColor(getContext(), mColorResourceId)资源的标识符。调用mColorResourceId将检索与# /views/events/splits.html.erb: <%= link_to "Add", associate_splits_event_path(id: @event.id, split_ids: [split.id]), :method => :put, :class => 'btn btn-xs btn-success' %> # routes.rb resources :events do member { put :associate_splits } end 对应的实际颜色值。

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