drawable-nodpi と drawable-anydpi と drawable の違い
Android Drawable Importer というプラグイン1を使って Vector Drawable を追加すると、drawable-anydpi
というディレクトリに追加されます。
前々から気になっていた drawable-nodpi
との違いを調べてみたところ、意外と情報が少なかったのですが、こちらのブログに情報がありました。
以下、まとめようと思ったのですが、原文がすばらしかったので、ほぼ翻訳です。
nodpi
nodpi
は全ての解像度で使用されます。ただし、特定の解像度に同じ名前のリソースがあった場合、そちらが使用されます。
例えば、res/drawable-nodpi/foo.xml
と res/drawable-xxhdpi/foo.png
がある場合、-xxhdpi
の解像度のデバイスでは res/drawable-xxhdpi/foo.png
が使用されます。
他の解像度のデバイスでは res/drawable-nodpi/foo.xml
が使用されます。
anydpi
anydpi
も全ての解像度で利用される点は同じです。ただし、特定の解像度に同じ名前のリソースがあろうとも、anydpi
が優先して使用されます。
例えば、res/drawable-anydpi/foo.xml
と res/drawable-xxhdpi/foo.png
がある場合、全てのデバイスで res/drawable-anydpi/foo.xml
が使用されます。
このため、anydpi
は他の修飾子と一緒に使用されることが多いです。
-v21
はよく見かけるものの一つでしょう。というのも、XML で定義できる drawable の一つである vector drawable は API Level 21 以降で追加されたためです2。
例えば、res/drawable-anydpi-v21/foo.xml
と res/drawable-xxhdpi/foo.png
が定義されている場合、API Level 21 (Android 5.0) 以上の端末では res/drawable-anydpi-v21/foo.xml
が使用され、
それ以外のデバイスでは res/drawable-xxhdpi/foo.png
が使用されます3。
無修飾子
何もついていない res/drawable/
は res/drawable-mdpi/
と同義です。解像度毎のリソースが定義される前の 非常に古い Android との互換性として残されています。
つまり、 res/drawable
を非解像度依存のリソースとして使用すべきではありません4。
drawable-nodpi に vector drawable を入れてはいけない
原文ではサラっと書いてあったのですが、結構大事なことだと思うので別項目にしました。
minSdkVersion
が 21 より小さい場合、 drawable-nodpi
に vector drawable をいれてはいけません。
というのも、Android Studio は API Level 21 (Android 5.0) 以前の端末のために png ファイルを自動生成しますが、drawable-nodpi
ディレクトリは対象外にしているためです。
0 件のコメント:
コメントを投稿