2017/01/16

drawable-nodpi と drawable-anydpi と drawable の違い

Android Drawable Importer というプラグイン1を使って Vector Drawable を追加すると、drawable-anydpi というディレクトリに追加されます。 前々から気になっていた drawable-nodpi との違いを調べてみたところ、意外と情報が少なかったのですが、こちらのブログに情報がありました。

以下、まとめようと思ったのですが、原文がすばらしかったので、ほぼ翻訳です。

nodpi

nodpi は全ての解像度で使用されます。ただし、特定の解像度に同じ名前のリソースがあった場合、そちらが使用されます。

例えば、res/drawable-nodpi/foo.xmlres/drawable-xxhdpi/foo.png がある場合、-xxhdpi の解像度のデバイスでは res/drawable-xxhdpi/foo.png が使用されます。 他の解像度のデバイスでは res/drawable-nodpi/foo.xml が使用されます。

anydpi

anydpi も全ての解像度で利用される点は同じです。ただし、特定の解像度に同じ名前のリソースがあろうとも、anydpi が優先して使用されます。

例えば、res/drawable-anydpi/foo.xmlres/drawable-xxhdpi/foo.png がある場合、全てのデバイスで res/drawable-anydpi/foo.xml が使用されます。

このため、anydpi は他の修飾子と一緒に使用されることが多いです。 -v21 はよく見かけるものの一つでしょう。というのも、XML で定義できる drawable の一つである vector drawable は API Level 21 以降で追加されたためです2

例えば、res/drawable-anydpi-v21/foo.xmlres/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 ディレクトリは対象外にしているためです。

  1. 一般的によく使われるようなアイコンを一発で追加できるプラグインです。結構便利。 
  2. ただし、後述のように Android Studio が png ファイルを生成してくれるので、あまり意識する必要は無いと思う。 
  3. -xxhdpi 解像度ではない場合は適切にサイズ変更が行われる 
  4. IMHO : 私の意見では 
?

0 件のコメント: