色調一個 drawable
可繪製的顏色可以著色。這對於支援應用程式中的不同主題以及減少可繪製資原始檔的數量非常有用。
在 SDK 21+上使用框架 API:
Drawable d = context.getDrawable(R.drawable.ic_launcher);
d.setTint(Color.WHITE);
在 SDK 4+上使用 android.support.v4 庫:
//Load the untinted resource
final Drawable drawableRes = ContextCompat.getDrawable(context, R.drawable.ic_launcher);
//Wrap it with the compatibility library so it can be altered
Drawable tintedDrawable = DrawableCompat.wrap(drawableRes);
//Apply a coloured tint
DrawableCompat.setTint(tintedDrawable, Color.WHITE);
//At this point you may use the tintedDrawable just as you usually would
//(and drawableRes can be discarded)
//NOTE: If your original drawableRes was in use somewhere (i.e. it was the result of
//a call to a `getBackground()` method then at this point you still need to replace
//the background. setTint does *not* alter the instance that drawableRes points to,
//but instead creates a new drawable instance
請注意,int color
不是指顏色資源,但你不限於顏色類中定義的那些顏色。當你在 XML 中定義了要使用的顏色時,你必須首先獲得它的值。
你可以使用以下方法替換 Color.WHITE
的用法
在定位較舊的 API 時:
getResources().getColor(R.color.your_color);
或者在新目標上:
ContextCompat.getColor(context, R.color.your_color);