Пользовательские вкладки 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()));
}
Ответы
Ответ 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