2019年1月1日 星期二

Android ImageView 搭配 wrap_content 時的寬高

當 ImageView 的寬高設定都是 wrap_content 時,很自然會想到圖片是以原始大小來顯示在螢幕上的,不過最近才發現這個原始大小的單位不是 pixel,而是 dp

例如以下 ImageView 的寫法

  1. <ImageView
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:src="@drawable/my_png">
  5. </ImageView>

假設圖片的原始大小為 256 * 256 pixels,不要以為在螢幕上就是佔了 256 * 256 pixels 的大小,實際上是佔了 256 * 256 dp 的大小,dp 會隨著不同的 device 而改變。假設圖片放在 res/drawable 資料夾,如果 app 現在跑在 XXHDPI 的手機上,圖片載入後長寬會變為 3 倍,佔用的記憶體會變為 9 倍。

這除了會讓圖片在螢幕上的大小比你預想的大之外,也會讓圖片占用的記憶體大小大大超出你的預期,不可不注意。


Reference: