Chrome自定义标签会更改默认关闭按钮不起作用

ant*_*009 15 android chrome-custom-tabs

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()));
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试更改自定义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()));
}
Run Code Online (Sandbox Code Playgroud)

提前谢谢了,

Fan*_*ock 20

我有一个观察.上个月,当搜索SO以查找各种Chrome自定义选项卡问题时,我发现这个答案建议使用24dp大小的图标,并且还发现这个问题说它可以正常使用PNG.

我已经使用后退箭头图标,从检查你的代码在这里.

当我使用"ic_arrow_back_black_48dp"时,它没有将默认关闭按钮更改为箭头(参见左图).

final Bitmap backButton = BitmapFactory.decodeResource(getResources(), R.drawable.ic_arrow_back_black_48dp);
Run Code Online (Sandbox Code Playgroud)

但是当我使用"ic_arrow_back_black_24dp"时,它完全将默认关闭按钮更改为箭头(参见右图).

final Bitmap backButton = BitmapFactory.decodeResource(getResources(), R.drawable.ic_arrow_back_black_24dp);
Run Code Online (Sandbox Code Playgroud)

因为它对于我来说非常完美,你也应该尝试"24dp"大小重新箭头图标,从这里,而不是"48dp"大小重新箭头图标.

屏幕截图:[Device:ASUS_Z00UD; 操作系统:6.0.1]

使用24dp大小图标而不是48dp大小时,默认关闭按钮已更改为箭头.

  • @FantasyPollock看来你只能使用png图标了.我原本试图使用svg图标.当我改为png时,它开始工作了.不知道为什么svg不起作用.我使用了与你相同的图标,但选择了png.你用svg图标测试了吗?谢谢. (2认同)

Nic*_*oso 8

假设您正在使用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);
Run Code Online (Sandbox Code Playgroud)


Anu*_*ngh 5

您可以直接获得BitmapDrawableDrawable而不是从VectorDrawablesetCloseButtonIcon需要@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;
}
Run Code Online (Sandbox Code Playgroud)

您可以将以上内容用作:

builder.setCloseButtonIcon(getBitmapFromDrawable(this, R.drawable.ic_arrow_back_black_24px)); 
Run Code Online (Sandbox Code Playgroud)

来自SO的参考