Android Studio 1.5.0でベクターアセットウィザードを使用する場合、そのウィザードを使用してインポートするベクター描画可能XMLはres/drawable/
に入ります。
ただし、build/
ディレクトリとその結果のAPKは、これらのXMLファイルがres/drawable-anydpi-v21/
リソースディレクトリに移動されることを示しています。 VectorDrawable
はAPIレベル21+でのみサポートされているため、-v21
部分は理にかなっています。ただし、-anydpi
は文書化されていないようです。元のインポート先と、ビルドシステムがそれを移動する場所の両方について、-nodpi
を期待していました。
-anydpi
が何を意味するのか、また-nodpi
との関係について公式の声明を見た人はいますか?いくつかのコードコメントが示唆するものだけでなく、実用的な効果を探しています。
これらは密度に依存しないリソースです。システムは、現在の画面の密度に関係なく、この修飾子でタグ付けされたリソースをスケーリングしません。
例えば:
ドットはxxhdpiでは小さく表示され、ldpiでは大きく表示されます。
ただし、リソースリゾルバーは、特定の修飾子が存在する場合に一致します。
例えば
Lollipop(API 21)hdpiデバイスでは、bitmapが使用されます。
Lollipop(API 21)xhdpiデバイスでは、ベクターが使用されます。
これらのリソースは、どのdpiでも優先されます。
例えば
Lollipop(API 21)hdpiデバイスでは、vectorが使用されます。
Lollipop(API 21)xhdpiデバイスでは、ベクターが使用されます。
注:anydpiが change Ic3288d0236fe0bff20bb1599aba2582c25b0db32 に追加されました。
ソースコード には、次のコメントが含まれています(639行目)。
/**
* Value for {@link #densityDpi} for resources that scale to any density (vector drawables).
* {@hide}
*/
public static final int DENSITY_DPI_ANY = 0xfffe;
/**
* Value for {@link #densityDpi} for resources that are not meant to be scaled.
* {@hide}
*/
public static final int DENSITY_DPI_NONE = 0xffff;
これで混乱が解消されることを願っています。
nodpi
:すべての密度のリソース。これらは密度に依存しないリソースです。システムは、現在の画面の密度に関係なく、この修飾子でタグ付けされたリソースをスケーリングしません。
anydpi
:この修飾子は、すべての画面密度に一致し、他の修飾子よりも優先されます。これはベクターのドロアブルに役立ちます。 APIレベル21で追加。
私はすべてにdrawable-nodpiを使用しており、大きなグラフィックがたくさんあります。グラフィックを「スケールアップ」することで文書化されていない結果の1つは、メモリ使用量が指数関数的に増加することです。したがって、「ドローアブル」で100Mのグラフィックを使用している場合、ユーザーデバイスの解像度に応じて、400Mまたは1.6Gにスケーリングされます。そして、デバイスの解像度は上がり続けます。もちろん、スケールアップしてもグラフィックの「シャープネス」は実際には増加しません。描画アクションは、画面サイズに対するグラフィックスの大きさを決定できます。複数の描画フォルダーでアプリを肥大化する必要はありません。