Chrome Custom Tabs更改了默认的关闭按钮不起作用
Chrome Custom Tabs更改了默认的关闭按钮不起作用
我正在尝试更改自定义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())); }
Chrome Custom Tabs change the default close button not working这个问题的出现的原因是,setCloseButtonIcon
方法需要一个Bitmap
类型的图标,但是从VectorDrawable
中直接获取BitmapDrawable
是不行的。
解决方法如下:
1. 从Drawable
中可以直接获取BitmapDrawable
,但是无法从VectorDrawable
中直接获取BitmapDrawable
。
2. 可以使用svg
格式的图片。可以从这里下载相关的svg
图片。
3. 提供了以下两个方法来获取Bitmap
:
- getBitmapFromDrawable
方法:从Drawable
中获取Bitmap
。如果Drawable
是BitmapDrawable
类型,则直接返回BitmapDrawable
的Bitmap
;如果Drawable
是VectorDrawable
类型,则调用getBitmapFromVectorDrawable
方法进行转换;否则抛出异常。
- getBitmapFromVectorDrawable
方法:从VectorDrawable
中获取Bitmap
。创建一个Bitmap
对象,然后在该Bitmap
上绘制VectorDrawable
,最后返回该Bitmap
。
4. 可以通过调用builder.setCloseButtonIcon(getBitmapFromDrawable(this, R.drawable.ic_arrow_back_black_24px))
来设置自定义的关闭按钮图标。
5. 可以参考Stack Overflow上的链接了解更多信息。
Chrome Custom Tabs change the default close button not working
Chrome Custom Tabs更改默认关闭按钮无效的问题出现的原因是使用了错误的图标大小。解决方法是使用24dp大小的PNG图标。
在Stack Overflow上,某些情况下使用24dp大小的图标,并且使用PNG格式的图标可以解决这个问题。使用48dp大小的图标不会更改默认关闭按钮为箭头图标,但使用24dp大小的图标可以成功更改为箭头图标。
可以从Material Design网站上下载24dp大小的箭头图标,并将其作为PNG格式的资源文件使用。只有24dp大小的PNG图标才能成功更改关闭按钮的图标,其他大小和格式的图标都不起作用。
某些情况下尝试使用SVG格式的图标,但并没有成功。只有使用24dp大小的PNG图标才能解决这个问题。
总结起来,要解决Chrome Custom Tabs更改默认关闭按钮无效的问题,需要使用24dp大小的PNG图标作为资源文件。其他大小和格式的图标都不起作用。
Chrome Custom Tabs change the default close button not working的问题出现的原因是使用了Google的库,并且图标的尺寸应该为24dp。
解决方法是使用BitmapFactory Options来实现:
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);