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