Подтвердить что ты не робот

Пользовательские вкладки Chrome меняют кнопку закрытия по умолчанию, не работающую

Я пытаюсь изменить кнопку закрытия по умолчанию на панели действий пользовательских вкладок Chrome. Я попытался установить с помощью setCloseButtonIcon() Тем не менее, кнопка закрытия по умолчанию все еще показывает. Я хочу изменить близко к стрелке.

Мой код ниже:

public void openHomePage() {
    final CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
    builder.setToolbarColor(ContextCompat.getColor(getActivity(), R.color.primary));
    final Bitmap backButton = BitmapFactory.decodeResource(getResources(), R.drawable.ic_arrow_back_black_48dp);
    builder.setCloseButtonIcon(backButton);

    builder.setShowTitle(true);
    final CustomTabsIntent customTabsIntent = builder.build();

    customTabsIntent.launchUrl(getActivity(), Uri.parse(mTvHomepage.getText().toString()));
}
4b9b3361

Ответ 1

У меня есть наблюдение. В прошлом месяце при поиске fooobar.com/questions/tagged/... для различных пользовательских вопросов на вкладке chrome я нашел этот ответ, предлагая использовать значок размера 24dp, а также найти этот вопрос, говорящий, что он отлично работает с PNG.

Я проверил ваш код с помощью значка стрелки назад из здесь.

Когда я использовал "ic_arrow_back_black_48dp" , он не менял кнопку закрытия по умолчанию на стрелку (см. левое изображение).

final Bitmap backButton = BitmapFactory.decodeResource(getResources(), R.drawable.ic_arrow_back_black_48dp);

Но когда я использовал "ic_arrow_back_black_24dp" , он отлично изменил кнопку закрытия по умолчанию на стрелку (см. правое изображение).

final Bitmap backButton = BitmapFactory.decodeResource(getResources(), R.drawable.ic_arrow_back_black_24dp);

Поскольку он отлично сработал у меня, вы также должны попробовать с "24dp" размером стрелки назад от здесь вместо "48dp" размер стрелки назад.

Снимок экрана: [Устройство: ASUS_Z00UD; ОС: 6.0.1]

Кнопка закрытия по умолчанию изменилась на стрелку при использовании значка размера 24dp вместо 48dp.

Ответ 2

Предполагая, что вы используете библиотеку Google, а не связанные с ней, размер значков должен быть 24dp как описанный здесь.

Это может быть достигнуто с помощью параметров BitmapFactory:

BitmapFactory.Options options = new BitmapFactory.Options();
options.outWidth = 24;
options.outHeight = 24;
options.inScaled = true; //already default, just for illustration - ie scale to screen density (dp)
... = BitmapFactory.decodeResource(getResources(), R.drawable.ic_arrow_back_black_48dp, opts);

Ответ 3

Вы можете напрямую получить BitmapDrawable от Drawable, но не от VectorDrawable, поскольку setCloseButtonIcon требует @NonNull Bitmap icon

Вы также можете использовать svg, как показано ниже. Загрузите svg отсюда ic_arrow_back_black_24px

Ниже приведены способы пояснения:

private static Bitmap getBitmapFromDrawable(Context context, int drawableId) {
Drawable drawable = ContextCompat.getDrawable(context, drawableId);
if (drawable instanceof BitmapDrawable) {
  return ((BitmapDrawable) drawable).getBitmap();
} else if (drawable instanceof VectorDrawable) {
  return getBitmapFromVectorDrawable((VectorDrawable) drawable);
} else {
  throw new IllegalArgumentException("Unable to convert to bitmap");
}
}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private static Bitmap getBitmapFromVectorDrawable(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(getBitmapFromDrawable(this, R.drawable.ic_arrow_back_black_24px)); 

Ссылка с SO

Ответ 4

почему бы вам не добавить Image Asset и сохранить в mipmap, тогда будет проще использовать значки по умолчанию, встроенные в андроид-студию Assest Studio

После загрузки Вы можете легко получить доступ к значкам и изображению из mipmap в xml файле с помощью ресурса src в ImageView на мгновение

android:src="@mipmap/ic_launcher"

Ответ 5

Чтобы заставить это работать в Kotlin (с использованием Android KTX) с любым ресурсом с возможностью рисования 24dp:

AppCompatResources.getDrawable(activity, R.drawable.ic_arrow_back_white_24dp)?.let {
    builder.setCloseButtonIcon(it.toBitmap())
}

И если вам нужно сделать тонировку:

AppCompatResources.getDrawable(activity, R.drawable.ic_arrow_back_black_24dp)?.mutate()?.let {
    DrawableCompat.setTint(it, Color.WHITE)
    builder.setCloseButtonIcon(it.toBitmap())
}

Если размер рисунка необходимо изменить, передайте новую ширину/высоту в функцию Drawable.toBitmap().

И если вы не используете Kotlin, то вы можете просто использовать эквивалент кода Drawable.toBitmap():

fun Drawable.toBitmap(
    @Px width: Int = intrinsicWidth,
    @Px height: Int = intrinsicHeight,
    config: Config? = null
): Bitmap {
    if (this is BitmapDrawable) {
        if (config == null || bitmap.config == config) {
            // Fast-path to return original. Bitmap.createScaledBitmap will do this check, but it
            // involves allocation and two jumps into native code so we perform the check ourselves.
            if (width == intrinsicWidth && height == intrinsicHeight) {
                return bitmap
            }
            return Bitmap.createScaledBitmap(bitmap, width, height, true)
        }
    }

    val (oldLeft, oldTop, oldRight, oldBottom) = bounds

    val bitmap = Bitmap.createBitmap(width, height, config ?: Config.ARGB_8888)
    setBounds(0, 0, width, height)
    draw(Canvas(bitmap))

    setBounds(oldLeft, oldTop, oldRight, oldBottom)
    return bitmap
}

Для получения дополнительной информации см. Этот ответ.

Ответ 6

Мне пришлось перейти на этот сайт: https://material.io/tools/icons/?icon=keyboard_backspace&style=baseline

Я получил PNG, а затем использовал его таким образом. Я знаю, что опаздываю на вечеринку, но это для тех, кто в ней нуждается.

Ответ 7

Мне тоже пришлось столкнуться с той же проблемой

решение:-
1) взять изображение (стрелка назад) в формате png
2) и держите размер изображения под 24dp