在我的应用程序中我想支持这样的功能,用户可以从列表中选择颜色(从WebService下载),并且当用户选择任何颜色(比如橙色)时,我的应用程序中的所有按钮都将背景颜色设置为橙色。
我已经检查了http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html之类的解决方案,但是我需要在我的应用中使用不同的颜色创建不同的样式。
我的需求是我只支持一种风格,只需要根据选择更改背景颜色,因此我不想在运行时获取所有按钮并应用该颜色。
因此,请建议任何其他更好的解决方案,将所选颜色应用于应用程序中的所有按钮,而无需获取活动中的所有按钮并设置其背景颜色。
答案 0 :(得分:2)
您可以使用特定颜色填充Bitmap
。
private BitmapDrawable makeColorFillDrawable(int color, Drawable d) {
Bitmap maskBitmap = ((BitmapDrawable) d).getBitmap();
final int width = maskBitmap.getWidth();
final int height = maskBitmap.getHeight();
maskBitmap = null;
final Bitmap outBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(outBitmap);
d.setBounds(0, 0, width, height);
d.setColorFilter(color, PorterDuff.Mode.SRC_IN);
d.draw(canvas);
d.setColorFilter(null);
d.setCallback(null);
return new BitmapDrawable(getResources(), outBitmap);
}
在SharedPreferences
中保存从服务器获取的颜色。然后子类Button
并根据您保存的值应用颜色填充drawable。您需要做的就是将XML中的<Button.../>
替换为自定义路径。
以下是ActionBar
图标的示例。
final Drawable d = getResources().getDrawable(android.R.drawable.sym_def_app_icon);
getActionBar().setIcon(makeColorFillDrawable(Color.RED, d));