带圆形背景的图标可以以下面的方式写XML (icon_with_circle_bg.xml)
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/circleBG"> <shape android:shape="oval" > <solid android:color="@color/colorAccent"/> </shape> </item> <item android:id="@+id/circleIcon" android:drawable="@mipmap/icon_home" android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp"/> </layer-list>
但有时需要动态修改背景颜色和图标,则需要在程序中动态修改。
修改背景色
LayerDrawable layerDrawable = (LayerDrawable) ContextCompat.getDrawable(context, R.drawable.icon_with_circle_bg); // 改变背景色 GradientDrawable backgroundColor = (GradientDrawable) layerDrawable .findDrawableByLayerId(R.id.circleBG); backgroundColor.setColor(menuColor);
修改图标:
// 改变图标 layerDrawable.setDrawableByLayerId(R.id.circleIcon, ContextCompat.getDrawable(context, menuRes)); layerDrawable.invalidateSelf();