我正在尝试更改自定义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()));
}
我有一个观察。上个月,当通过SO搜索各种chrome自定义选项卡问题时,我发现这个answer建议使用24dp大小的图标,并且还发现这个question说它与PNG一起工作正常。
我使用here.中的后退箭头图标检查了您的代码
当我使用“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);
由于它对我来说非常有用,你还应该尝试使用here中的“24dp”尺寸后退箭头图标而不是“48dp”尺寸后退箭头图标。
屏幕截图:[Device:ASUS_Z00UD;操作系统:6.0.1]
假设您正在使用Google库而不是相关的库,图标大小应为24dp,如documented here。
这可以通过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);
你可以直接从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));
为什么不在mipmap中添加图像资源和存储然后在android studio Assest Studio中使用内置的默认图标会更容易
上传后您可以使用ImageView中的src资源轻松地从xml文件中的mipmap访问图标和图像
android:src="@mipmap/ic_launcher"
使用任何24dp可绘制资源在Kotlin中使用(使用Android KTX):
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的大小,则将新的宽度/高度传递给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
}
有关更多信息,请参阅this的答案。
我也不得不面对同样的问题
解决方案: -
1)以image(back arrow)
格式取png
。
2)将图像大小保持在24dp
下。
我不得不去这个网站:https://material.io/tools/icons/?icon=keyboard_backspace&style=baseline
我得到了PNG,然后以这种方式使用它。我知道我为聚会迟到了,但无论谁需要它。