首选setIcon到ColorDrawable在Android 5.0 Lollipop上不起作用

时间:2014-12-10 12:41:29

标签: android android-preferences

在我的应用中,我使用以下行来区分一些偏好:

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);
}  

2 个答案:

答案 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"/>

如果您不想在代码中更改图标,这是一个简单的解决方案。