1

我正在使用自定义Drawable类为我的ActionBarSherlock. 自定义Drawable类,SVGDrawable实际上是我自己的 SVG 库的一部分。我已经为这个应用程序的其他领域开发了这个库,但我发现创建ActionBarSVG 格式的图标也很有用,因为它避免了生成多个图像来支持各种密度。所以,就这个问题而言,SVG 的东西并不真正相关。所有相关的是SVGDrawable根据文件的内容呈现内容.svg,并且固有的宽度/高度被认为是原始.svg文档的宽度和高度。

这一切都运行得很好,除了一个小问题,即SVGDrawable使用draw()固有宽度和高度而不是适合ActionBarSherlock. SVGDrawable's返回 SVG 文档的getIntrinsicHeight()原始高度(宽度也是如此),因此如果原始 SVD 文档是 300px 正方形,那么这就是SVGDrawable将呈现的内容。

我想它ActionBarSherlock基本上希望它的图标Drawables以它们自己的固有尺寸绘制,因为在通常情况下,您将使用图像资源可绘制对象,并且这些可绘制对象已经被授权为各种密度的正确尺寸。

最初,我错误地假设SVGDrawables setBounds() 将使用一些值来说明ActionBarSherlock允许图标的大小。

对于我的情况,我能想到的唯一解决方法是添加一种方法setIntrinsicDimensions(int width, int height),该方法基本上会覆盖从原始 SVG 文档读取的尺寸。我想,当以SVGDrawable编程方式将其添加到时ActionBarSherlock,我也会调用此方法并提供合适的宽度和高度,其中高度是ActionBarSherlock减去一些填充的高度。

任何更好的方法,有人吗?

4

0 回答 0