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

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

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

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

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));
Другие вопросы по тегам