1

カスタムDrawableクラスを使用して、ActionBarSherlock. カスタムDrawableクラス はSVGDrawable、実際には私自身の SVG ライブラリの一部です。このアプリケーションの他の領域用にこのライブラリを開発しましたが、ActionBarさまざまな密度をサポートするために複数の画像を生成する必要がないため、SVG 形式でもアイコンを作成すると便利です。したがって、この質問の目的上、SVG はあまり関係ありません。関連するのはSVGDrawable、ファイルのコンテンツに基づいてコンテンツをレンダリングする.svgことと、固有の幅/高さが元.svgのドキュメントの幅と高さと見なされることだけです。

が 内に収まる幅と高さではなく、固有の幅と高さを使用して画像SVGDrawableに要求されるという小さな問題を除いて、すべてが完全にうまく機能します。は SVG ドキュメントの元の高さを返します (幅についても同じことが言えます)。したがって、たとえば元の SVD ドキュメントが 300 ピクセルの正方形である場合、それが でレンダリングされます。draw()ActionBarSherlockSVGDrawablegetIntrinsicHeight()SVGDrawable

通常、画像リソースのドローアブルを使用し、それらのドローアブルは、さまざまな密度に対して正確に正しいサイズであることが既に承認されているため、はActionBarSherlock基本的にアイコンを独自の固有のサイズで描画することを望んでいると思います。Drawables

当初、私はSVGDrawablesetBounds() がActionBarSherlockアイコンの大きさを示すいくつかの値で呼び出されると誤って想定していました。

私の状況では、考えられる唯一の回避setIntrinsicDimensions(int width, int height)策は、元の SVG ドキュメントから読み取った寸法を基本的にオーバーライドするようなメソッドを追加することです。SVGDrawableプログラムで に を追加するときに、ActionBarSherlockこのメソッドも呼び出して、適切な幅と高さを指定すると思います。ここで、高さは、ActionBarSherlockパディングを引いた高さです。

より良いアプローチはありますか?

4

0 に答える 0