在我的应用中,我使用以下行来区分一些偏好:
preference.setIcon(new ColorDrawable(color));
在Lollipop之前的Android版本中,它工作正常,首选项显示所选颜色的方形图标,但在Lollipop中没有显示。
如何解决它?
由于
这是一个适合我的解决方案:
preference.setIcon(getPreferenceIcon(color));
function Drawable getPreferenceIcon(int color)
{
if (Build.VERSION.SDK_INT < 21) return new ColorDrawable(color);
int bitmap_size = 64;
Bitmap bitmap = Bitmap.createBitmap(bitmap_size, bitmap_size, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setColor(color);
canvas.drawRect(new Rect(0, 0, bitmap_size, bitmap_size), paint);
return new BitmapDrawable(getResources(), bitmap);
}
答案 0 :(得分:0)
以下是The Matrix答案的简化版本,我删除了对版本的检查,因为它在冰淇淋三明治上也无法正常工作(显示的是细线,而不是正方形):
private Drawable getPreferenceIcon(int color) {
int size = 200;// Set to a big size to fit all screens, will be contained anyway in the preference row
Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
bitmap.eraseColor(color);
return new BitmapDrawable(getResources(), bitmap);
}
答案 1 :(得分:0)
如果您愿意在XML文件中进行操作,则可以采用以下简单的解决方案:
<Preference
...
android:icon="@color/colorSome"/>
如果您不想在代码中更改图标,这是一个简单的解决方案。