setCloseButtonIcon (растровое изображение) не работает с SVG в ChromeCustomTab

Мне нужно изменить значок креста по умолчанию в ChromeCustomTab Android, я меняю его с помощью заднего значка, используя приведенный ниже код:

Bitmap icon = BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_arrow_back_white_24dp);

Он отлично работает с PNG, но не с SVG.

В соответствии с этой документацией мы должны поддерживать размер изображения в соответствии с этой документацией.

https://developer.android.com/reference/android/support/customtabs/CustomTabsIntent.html#KEY_ICON

Я думаю, что это не работает, потому что они не соответствуют размерам, указанным в документации.


person Doomers    schedule 19.02.2017    source источник


Ответы (1)


Вам нужно вернуть действительный Bitmap. Для VectorDrawable нужно сделать что-то большее. Вы можете использовать эти методы:

private static Bitmap bitmapFromDrawable(Context context, int drawableId) {
    Drawable drawable = ContextCompat.getDrawable(context, drawableId);
    if (drawable instanceof VectorDrawable) {
        return bitmapFromVectorDrawable((VectorDrawable) drawable);
    }
    return ((BitmapDrawable) drawable).getBitmap();
}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private static Bitmap bitmapFromVectorDrawable(VectorDrawable vectorDrawable) {
    Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(), vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    vectorDrawable.draw(canvas);
    return bitmap;
}

Затем вы можете использовать его как:

builder.setCloseButtonIcon(bitmapFromDrawable(this, R.drawable. ic_arrow_back_white_24dp));
person Daniel Alvarez    schedule 03.08.2018