我正在使用自定义Drawable
类为我的ActionBarSherlock
. 自定义Drawable
类,SVGDrawable
实际上是我自己的 SVG 库的一部分。我已经为这个应用程序的其他领域开发了这个库,但我发现创建ActionBar
SVG 格式的图标也很有用,因为它避免了生成多个图像来支持各种密度。所以,就这个问题而言,SVG 的东西并不真正相关。所有相关的是SVGDrawable
根据文件的内容呈现内容.svg
,并且固有的宽度/高度被认为是原始.svg
文档的宽度和高度。
这一切都运行得很好,除了一个小问题,即SVGDrawable
使用draw()
固有宽度和高度而不是适合ActionBarSherlock
. SVGDrawable
's返回 SVG 文档的getIntrinsicHeight()
原始高度(宽度也是如此),因此如果原始 SVD 文档是 300px 正方形,那么这就是SVGDrawable
将呈现的内容。
我想它ActionBarSherlock
基本上希望它的图标Drawables
以它们自己的固有尺寸绘制,因为在通常情况下,您将使用图像资源可绘制对象,并且这些可绘制对象已经被授权为各种密度的正确尺寸。
最初,我错误地假设SVGDrawable
s setBounds() 将使用一些值来说明ActionBarSherlock
允许图标的大小。
对于我的情况,我能想到的唯一解决方法是添加一种方法setIntrinsicDimensions(int width, int height)
,该方法基本上会覆盖从原始 SVG 文档读取的尺寸。我想,当以SVGDrawable
编程方式将其添加到时ActionBarSherlock
,我也会调用此方法并提供合适的宽度和高度,其中高度是ActionBarSherlock
减去一些填充的高度。
任何更好的方法,有人吗?