カスタムDrawable
クラスを使用して、ActionBarSherlock
. カスタムDrawable
クラス はSVGDrawable
、実際には私自身の SVG ライブラリの一部です。このアプリケーションの他の領域用にこのライブラリを開発しましたが、ActionBar
さまざまな密度をサポートするために複数の画像を生成する必要がないため、SVG 形式でもアイコンを作成すると便利です。したがって、この質問の目的上、SVG はあまり関係ありません。関連するのはSVGDrawable
、ファイルのコンテンツに基づいてコンテンツをレンダリングする.svg
ことと、固有の幅/高さが元.svg
のドキュメントの幅と高さと見なされることだけです。
が 内に収まる幅と高さではなく、固有の幅と高さを使用して画像SVGDrawable
に要求されるという小さな問題を除いて、すべてが完全にうまく機能します。は SVG ドキュメントの元の高さを返します (幅についても同じことが言えます)。したがって、たとえば元の SVD ドキュメントが 300 ピクセルの正方形である場合、それが でレンダリングされます。draw()
ActionBarSherlock
SVGDrawable
getIntrinsicHeight()
SVGDrawable
通常、画像リソースのドローアブルを使用し、それらのドローアブルは、さまざまな密度に対して正確に正しいサイズであることが既に承認されているため、はActionBarSherlock
基本的にアイコンを独自の固有のサイズで描画することを望んでいると思います。Drawables
当初、私はSVGDrawable
setBounds() がActionBarSherlock
アイコンの大きさを示すいくつかの値で呼び出されると誤って想定していました。
私の状況では、考えられる唯一の回避setIntrinsicDimensions(int width, int height)
策は、元の SVG ドキュメントから読み取った寸法を基本的にオーバーライドするようなメソッドを追加することです。SVGDrawable
プログラムで に を追加するときに、ActionBarSherlock
このメソッドも呼び出して、適切な幅と高さを指定すると思います。ここで、高さは、ActionBarSherlock
パディングを引いた高さです。
より良いアプローチはありますか?