Android Drawable

Ресурси зображень

Android генерує ідентифікатори ресурсів для файлів зображень, розташованих у підкаталозі/res/drawable. Підтримуються файли PNG (найкращий), GIF, JPG. Для кожного файлу зображення, який міститься в цьому каталозі, генерується унікальний ідентифікатор на основі імені файлу без розширення. Наприклад, якщо файл має ім'я "cat.jpg", то для нього буде створено ідентифікатор ресурсуR.drawable.cat. Потрібно стежити за унікальністю імен, тому що якщо у вас будуть два файли "cat.jpg" та "cat.png", то виникне помилка. Крім того, не потрібно створювати додаткових підкаталогів у папціres/drawable, оскільки файли звідти не зчитуватимуться.

Можна адаптувати зображення для різних роздільних здатностей та розмірів екранів. Для цього потрібно створити спеціальні папки та складати там потрібні картинки. Наприклад, для різних дозволів екрану використовуються папкиdrawable-hdpi,drawable-mdpi,drawable-ldpiта ін. Існує аналогічний поділ для розмірів екрану:drawable-normal,drawable-largeі т.д.. Можна поєднувати ці способи і створювати папки типуdrawable-normal-hdpi. Для зображень, які повинні залишатися незмінними незалежно від роздільної здатності екрана, слід створити папкуdrawable-nodpi.

Для пам'яті наведу розміри зображень для значків і фону екрана:

  • res/drawable-ldpi - (120 DPI) (QVGA): ic_launcher.png (значок), 36 × 36 background.png (фон), 320 × 240 pixels
  • res/drawable-mdpi - (160 DPI) (HVGA): background.png, 320 × 480
  • res/drawable-hdpi - (240 DPI) (WVGA): ic_launcher.png, 72 × 72 background.png, 800 × 480
  • res/drawable-xhdpi (320 DPI)(WSVGA or HDTV): ic_launcher.png, 96 × 96 background.png, 1024 × 600 або 1280 × 720 pixels

Щоб послатися на зображення зres/drawableу XML-файлах розмітки, використовуйте наступний синтаксис:

Зверніть увагу, що в будь-якому випадку ми звертаємося до ресурсу якdrawable, а неdrawable-hdpiабо ще якось.

Програмним способом можна достукатися до зображення таким чином:

Android включає прості ресурси для малювання, які можна описати у форматі XML. Це стосується класівColorDrawable,ShapeDrawableтаGradientDrawable. Дані ресурси зберігаються в каталозіres/drawableі можуть бути ідентифіковані в коді програми за іменами файлів, записаними в нижньому регістрі.

Якщо описувати ці ресурси у форматі XML і вказувати атрибути їм за допомогою апаратно-незалежних пікселів (density-independent pixels), система зможе їх плавно масштабувати. Як і у випадку з векторною графікою, ці ресурси можуть динамічно масштабуватися, відображаючись коректно і без артефактів за будь-яких розмірів та дозволів екрану, незалежно від щільності пікселів. Виняток - ресурсGradientDrawable, радіус для якого повинен бути вказаний у пікселях.

Отримати ім'я ресурсу

Іноді потрібно отримати не сам ідентифікатор, а його ім'я у виглядіR.drawable.cat, що зберегти його, скажімо, у базі даних. Скористайтеся наступним прийомом:

Буває й обернене завдання - з імені ресурсу отримати ідентифікатор. Той самий принцип.

Строго кажучи це стосується не тільки типуdrawable, але зазвичай доводиться зустрічатися з проблемою саме для них.